|
|
|
|
暗号強度 | 公開鍵暗号 RSA暗号方式 鍵ビット長 | 公開鍵暗号 ECDSA暗号方式 (楕円曲線暗号) 鍵ビット長 | 共通鍵暗号 AES暗号方式 鍵ビット長 | SHAハッシュ関数 | HMAC 暗号ハッシュ関数 | 2030年末まで | 2031年以降 |
80以下 (112未満) | 1024 | 160 | 2TDEA | SHA-1 | -- | × Legacy use | × Legacy use |
112 | 2048 | 224 | 3TDEA | SHA-224、SHA-512/224 | -- | ○ | × Legacy use |
128 | 3072 | 256 | AES-128 | SHA-256、SHA-512/256 | SHA-1 | ○ | ○ |
192 | 7680 | 384 | AES-192 | SHA-384 | SHA-224、SHA-512/224 | ○ | ○ |
256 | 15360 | 512 | AES-256 | SHA-512 | SHA-256、SHA-512/256 | ○ | ○ |
RSA暗号方式 鍵ビット長 | 利用期限 | 特定用途での延長 |
1408-bit | 2024年末まで | 2025年末まで |
1984-bit | 2029年末まで | -- |
使い方 | 目的 | 暗号化 | 復号化 | 補足 |
その1 | メッセージの秘匿送信 | 「受信者」の「公開鍵」 | 「受信者」の「秘密鍵」 | 受信者以外は暗号化メッセージを解読できない |
その2 | 自分である事の認証・証明 | 「送信者」の「秘密鍵」 | 「送信者」の「公開鍵」 | 送信者以外は暗号化メッセージを作れない |
ゴルゴ13 (Volume108) 最終暗号 (SPコミックスコンパクト) (日本語) コミック - 2007/9/28 ASIN: 4845830612 |
ゴルゴ13 (129) (SPコミックス) (日本語) コミック - 2003/7/5 ASIN: 4845801299 |
ゴルゴ13 THE LAST CODE〜最終暗号〜 (My first big) (日本語) ムック - 2015/8/7 ASIN: 4091198481 |
暗号解読(上) (新潮文庫) (日本語) 文庫 - 2007/6/28 ASIN: 410215972X |
RSAx string PlainText = "Encrypt Me"; string KeyInfo = "....."; RSAx rsa = new RSAx(KeyInfo, 1024); byte[] CTX = rsax.Encrypt(Encoding.UTF8.GetBytes(PlainText), true); string CipherText = Convert.ToBase64String(CTX); byte[] ETX = Convert.FromBase64String(CipherText); byte[] PTX = rsax.Decrypt(ETX, true); string DecryptedString = Encoding.UTF8.GetString(PTX);
namespace RSAExtensions public static class RSAPrivateEncryption byte[] PrivateEncryption(byte[] data) byte[] PublicDecryption(byte[] encryptedData) string secret = "My secret message"; RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(512); // Key bits length /* * Skip the loading part for the RSACryptoServiceProvider will generate * random Private / Public keys pair, that you can save later with * rsa.ToXmlString(true); * string key = "private or public key as xml string"; rsa.FromXmlString(key); */ byte[] secretData = Encoding.UTF8.GetBytes(secret); byte[] encrypted = rsa.PrivareEncryption(secretData); byte[] decrypted = rsa.PublicDecryption(encrypted); string decString = Encoding.UTF8.GetString(decrypted); // And back to string Assert.AreEqual("My secret message", decString);
C#の内部で RSA鍵ファイルを生成して RSAの暗号化と復号化のサンプル 外部の DER形式の鍵ファイルを C#で読み込んで RSAの暗号化と復号化のサンプル using System; using System.IO; using System.Text; // https://docs.microsoft.com/ja-jp/dotnet/api/system.security.cryptography.rsacryptoserviceprovider?view=netframework-4.8 using System.Security.Cryptography; // https://www.codeproject.com/articles/25487/cryptographic-interoperability-keys using CSInteropKeys; namespace TestRSACryptoServiceProvider { class Program { static void Main(string[] args) { try { // RSA KeySize = 2048 bit(Windows 8.1 = 512 to 16384) int dwKeySize = 2048; // false = PKCS#1 v1.5 padding, true = OAEP 最適非対称暗号化パディング // false = "RSA/ECB/PKCS1Padding", "RSA/NONE/PKCS1Padding"に相当 // true = "RSA/ECB/OAEPPadding", "RSA/NONE/OAEPPadding"に相当 bool fOAEP = false; // Create a UnicodeEncoder to convert between byte array and string. // UnicodeEncoding ByteConverter = new UnicodeEncoding(); // Create byte arrays to hold original, encrypted, and decrypted data. // byte[] dataToEncrypt = ByteConverter.GetBytes("Data to Encrypt あいう"); byte[] dataToEncrypt; byte[] encryptedData; byte[] decryptedData; // C#の内部で RSA鍵ファイルを生成して RSAの暗号化と復号化のサンプル // Create a new instance of RSACryptoServiceProvider to generate // public and private key data. using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(dwKeySize)) { Console.WriteLine("========"); string plainText = "C#の内部で RSA鍵ファイルを生成して RSAの暗号化と復号化のサンプル"; Console.WriteLine(plainText); dataToEncrypt = Encoding.UTF8.GetBytes(plainText); Console.WriteLine("RSA.KeySize : {0}\n", RSA.KeySize); // 「公開鍵」で平文データを RSA暗号化する // Pass the data to ENCRYPT, the public key information // (using RSACryptoServiceProvider.ExportParameters(false), // and a boolean flag specifying no OAEP padding. printRSAKeyInfo(RSA.ExportParameters(false), false); encryptedData = RSAEncrypt(dataToEncrypt, RSA.ExportParameters(false), fOAEP); // 「秘密鍵」で暗号済みデータを RSA復号化する // Pass the data to DECRYPT, the private key information // (using RSACryptoServiceProvider.ExportParameters(true), // and a boolean flag specifying no OAEP padding. printRSAKeyInfo(RSA.ExportParameters(true), true); decryptedData = RSADecrypt(encryptedData, RSA.ExportParameters(true), fOAEP); // Display the decrypted plaintext to the console. Console.WriteLine("Decrypted plaintext: {0}", Encoding.UTF8.GetString(decryptedData)); /* // .NET C# RSACryptoServiceProviderは「公開鍵」では RSA復号化できない // 「秘密鍵」で平文データを RSA暗号化する // Pass the data to ENCRYPT, the public key information // (using RSACryptoServiceProvider.ExportParameters(false), // and a boolean flag specifying no OAEP padding. printRSAKeyInfo(RSA.ExportParameters(true), true); encryptedData = RSAEncrypt(dataToEncrypt, RSA.ExportParameters(true), fOAEP); // 「公開鍵」で暗号済みデータを RSA復号化する // Pass the data to DECRYPT, the private key information // (using RSACryptoServiceProvider.ExportParameters(true), // and a boolean flag specifying no OAEP padding. printRSAKeyInfo(RSA.ExportParameters(false), false); decryptedData = RSADecrypt(encryptedData, RSA.ExportParameters(false), fOAEP); System.Security.Cryptography.CryptographicException: キーが正しくありません。 場所 System.Security.Cryptography.CryptographicException.ThrowCryptogaphicException(Int32 hr) 場所 System.Security.Cryptography.Utils._DecryptKey(SafeKeyHandle hPubKey, Byte[] key, Int32 dwFlags) 場所 System.Security.Cryptography.RSACryptoServiceProvider.Decrypt(Byte[] rgb, Boolean fOAEP) // Display the decrypted plaintext to the console. Console.WriteLine("Decrypted plaintext: {0}", Encoding.UTF8.GetString(decryptedData)); */ // C#で生成した RSA鍵ファイルを MSBLOB形式で保存するサンプル // 「秘密鍵」を PRIVATEKEYBLOB形式で保存 bool includePrivateParameters = true; byte[] privateKeyBlob = RSA.ExportCspBlob(includePrivateParameters); string fileName = @"PRIVATEKEY.msblob"; using (var writer = new BinaryWriter(new FileStream(fileName, FileMode.Create))) { writer.Write(privateKeyBlob); } // 「公開鍵」を PUBLICKEYBLOB形式で保存 includePrivateParameters = false; byte[] publicKeyBlob = RSA.ExportCspBlob(includePrivateParameters); fileName = @"PUBLICKEY.msblob"; using (var writer = new BinaryWriter(new FileStream(fileName, FileMode.Create))) { writer.Write(publicKeyBlob); } // C#側で RSA暗号化したデータをファイルに書き出す // C#側で「公開鍵」で暗号化したデータを下記のコマンドラインで「秘密鍵」で RSA復号化できる // openssl rsa -in PRIVATEKEY.msblob -inform msblob -out private-cs-key.pem // openssl rsautl -decrypt -inkey private-cs-key.pem -in test_cs.enc -out decode_test_cs.txt fileName = @"test_cs.enc"; using (var writer = new BinaryWriter(new FileStream(fileName, FileMode.Create))) { writer.Write(encryptedData); } } // DER形式の鍵ファイルを C#で読み込んで RSAの暗号化と復号化のサンプル { Console.WriteLine("========"); string plainText = "DER形式の鍵ファイルを C#で読み込んで RSAの暗号化と復号化のサンプル"; Console.WriteLine(plainText); dataToEncrypt = Encoding.UTF8.GetBytes(plainText); // 外部で生成した RSA鍵ファイルを C#で読み込むサンプル // AsnKeyParser ASN.1/DER parser class // 「秘密鍵」 AsnKeyParser privateKeyParser = new AsnKeyParser("private-key.der"); RSAParameters privateKey = privateKeyParser.ParseRSAPrivateKey(); // 「公開鍵」 AsnKeyParser publicKeyParser = new AsnKeyParser("public-key.der"); RSAParameters publicKey = publicKeyParser.ParseRSAPublicKey(); // .Net class CspParametersは不要 // CspParameters csp = new CspParameters(); // csp.KeyContainerName = "KeyContainerName"; // csp.ProviderType = 1; // ProviderType.PROV_RSA_FULL // csp.KeyNumber = (int)KeyNumber.Exchange; // 1 // .Net class RSACryptoServiceProviderのコンストラクタに引数は不要 RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); rsa.PersistKeyInCsp = false; // 暗号化サービス プロバイダー (CSP) にキーを保存するかどうか? // "public-key.der" 「公開鍵」で平文データを RSA暗号化する printRSAKeyInfo(publicKey, false); encryptedData = RSAEncrypt(dataToEncrypt, publicKey, fOAEP); // C#側で RSA暗号化したデータをファイルに書き出す // C#側で「公開鍵」で暗号化したデータを下記のコマンドラインで「秘密鍵」で RSA復号化できる // openssl rsautl -decrypt -inkey private-key.pem -in test.enc -out test_decode.txt string fileName = @"test.enc"; using (var writer = new BinaryWriter(new FileStream(fileName, FileMode.Create))) { writer.Write(encryptedData); } // "private-key.der" 「秘密鍵」で暗号済みデータを RSA復号化する // 「公開鍵」では復号化できない CryptographicExceptionになる printRSAKeyInfo(privateKey, true); decryptedData = RSADecrypt(encryptedData, privateKey, fOAEP); // Display the decrypted plaintext to the console. Console.WriteLine("Decrypted plaintext: {0}", Encoding.UTF8.GetString(decryptedData)); } } catch (ArgumentNullException) { // Catch this exception in case the encryption did // not succeed. Console.WriteLine("Encryption failed."); } } public static string BytesToStr(byte[] bytes) { StringBuilder str = new StringBuilder(); for (int i = 0; i < bytes.Length; i++) str.AppendFormat("{0:X2}", bytes[i]); return str.ToString(); } public static void printRSAKeyInfo(RSAParameters RSAKeyInfo, bool isPrivate) { byte[] M = RSAKeyInfo.Modulus; // modulus byte[] Ex = RSAKeyInfo.Exponent; // publicExponent Console.WriteLine(""); Console.WriteLine("=== RSAKeyInfo ==="); Console.WriteLine("M : {0}", BytesToStr(M)); Console.WriteLine("Ex : {0}", BytesToStr(Ex)); if (isPrivate) { byte[] D = RSAKeyInfo.D; // privateExponent byte[] P = RSAKeyInfo.P; // prime1 byte[] Q = RSAKeyInfo.Q; // prime2 byte[] DP = RSAKeyInfo.DP; // exponent1 byte[] DQ = RSAKeyInfo.DQ; // exponent2 byte[] IQ = RSAKeyInfo.InverseQ; // coefficient Console.WriteLine("---"); Console.WriteLine("D : {0}", BytesToStr(D)); Console.WriteLine("P : {0}", BytesToStr(P)); Console.WriteLine("Q : {0}", BytesToStr(Q)); Console.WriteLine("DP : {0}", BytesToStr(DP)); Console.WriteLine("DQ : {0}", BytesToStr(DQ)); Console.WriteLine("IQ : {0}", BytesToStr(IQ)); } } public static byte[] RSAEncrypt(byte[] DataToEncrypt, RSAParameters RSAKeyInfo, bool DoOAEPPadding) { Console.WriteLine("DataToEncrypt : {0}\n", BytesToStr(DataToEncrypt)); try { byte[] encryptedData; //Create a new instance of RSACryptoServiceProvider. using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider()) { // Import the RSA Key information. This only needs // toinclude the public key information. RSA.ImportParameters(RSAKeyInfo); // Encrypt the passed byte array and specify OAEP padding. // OAEP padding is only available on Microsoft Windows XP or // later. encryptedData = RSA.Encrypt(DataToEncrypt, DoOAEPPadding); } return encryptedData; } catch (CryptographicException e) { // Catch and display a CryptographicException // to the console. Console.WriteLine(e.Message); return null; } } public static byte[] RSADecrypt(byte[] DataToDecrypt, RSAParameters RSAKeyInfo, bool DoOAEPPadding) { Console.WriteLine("DataToDecrypt : {0}\n", BytesToStr(DataToDecrypt)); try { byte[] decryptedData; // Create a new instance of RSACryptoServiceProvider. using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider()) { // Import the RSA Key information. This needs // to include the private key information. RSA.ImportParameters(RSAKeyInfo); // Decrypt the passed byte array and specify OAEP padding. // OAEP padding is only available on Microsoft Windows XP or // later. decryptedData = RSA.Decrypt(DataToDecrypt, DoOAEPPadding); } return decryptedData; } catch (CryptographicException e) { // Catch and display a CryptographicException // to the console. Console.WriteLine(e.ToString()); return null; } } } }
.. 省略 .. internal RSAParameters ParseRSAPrivateKey() { .. 省略 .. // Checkpoint position = parser.CurrentPosition(); // Version value = parser.NextInteger(); if (0x00 != value[0]) { StringBuilder sb = new StringBuilder("Incorrect PrivateKeyInfo Version. "); BigInteger v = new BigInteger(value); sb.AppendFormat("Expected: 0, Specified: {0}", v.ToString(10)); throw new BerDecodeException(sb.ToString(), position); } /* ここの処理はスキップする // Checkpoint position = parser.CurrentPosition(); // Ignore Sequence - AlgorithmIdentifier length = parser.NextSequence(); if (length > parser.RemainingBytes()) { StringBuilder sb = new StringBuilder("Incorrect AlgorithmIdentifier Size. "); sb.AppendFormat("Specified: {0}, Remaining: {1}", length.ToString(CultureInfo.InvariantCulture), parser.RemainingBytes().ToString(CultureInfo.InvariantCulture)); throw new BerDecodeException(sb.ToString(), position); } .. 省略 .. .. 省略 .. // Checkpoint position = parser.CurrentPosition(); // Version value = parser.NextInteger(); if (0x00 != value[0]) { StringBuilder sb = new StringBuilder("Incorrect RSAPrivateKey Version. "); BigInteger v = new BigInteger(value); sb.AppendFormat("Expected: 0, Specified: {0}", v.ToString(10)); throw new BerDecodeException(sb.ToString(), position); } ここまで */ parameters.Modulus = TrimLeadingZero(parser.NextInteger()); parameters.Exponent = TrimLeadingZero(parser.NextInteger()); parameters.D = TrimLeadingZero(parser.NextInteger()); .. 省略 ..
> TestRSACryptoServiceProvider.exe ======== C#の内部で RSA鍵ファイルを生成して RSAの暗号化と復号化のサンプル RSA.KeySize : 2048 === RSAKeyInfo === M : B8C0CBBD652B6761DD22A252F96EB3375E68A5206CE2FE6DAA4E103860B30574EC15550F42AF037D113B72327429A18EF45617543AB8FCFC10533AC9D1A4C1D98E2105933292A11E2044953987EE1BBF9D53DE10A924D02A519EAFF93F76AED716440021E4DED2276FA1344BA2C0143AEDA05D6DBF35D370CBA89E8FD28B15833DD7F00D2655CF003C27846A25D174EA5CCCCD7A698269C2255AB9AC0D9164F5B52D2856564C70F87C27DF3BE78F450E03A1A63E8302E169D50237B43D5C31C5581D12E19364C9C2C76FF394917B6FC3284DCA98DC8F45C0EF88970AC167CE871B9FB7A8D1FB411F47BD09404B5180B2EA701096ECB07FD34E0877453AF63015 Ex : 010001 DataToEncrypt : 4323E381AEE58685E983A8E381A720525341E98DB5E38395E382A1E382A4E383ABE38292E7949FE68890E38197E381A620525341E381AEE69A97E58FB7E58C96E381A8E5BEA9E58FB7E58C96E381AEE382B5E383B3E38397E383AB === RSAKeyInfo === M : B8C0CBBD652B6761DD22A252F96EB3375E68A5206CE2FE6DAA4E103860B30574EC15550F42AF037D113B72327429A18EF45617543AB8FCFC10533AC9D1A4C1D98E2105933292A11E2044953987EE1BBF9D53DE10A924D02A519EAFF93F76AED716440021E4DED2276FA1344BA2C0143AEDA05D6DBF35D370CBA89E8FD28B15833DD7F00D2655CF003C27846A25D174EA5CCCCD7A698269C2255AB9AC0D9164F5B52D2856564C70F87C27DF3BE78F450E03A1A63E8302E169D50237B43D5C31C5581D12E19364C9C2C76FF394917B6FC3284DCA98DC8F45C0EF88970AC167CE871B9FB7A8D1FB411F47BD09404B5180B2EA701096ECB07FD34E0877453AF63015 Ex : 010001 --- D : B24E4FD3C01A3DB2738B8381F4FD63B5A245F867ECEEBE82F484569F32A45435DDCB50C663A32908C162CFF9E5A67027D9A464EB83A9196FE4098F894BED68B120BCB9F6B02E57950DAB63219D10AE7325D1D555DB088E66E952EF9EEC230CE6C4B468344E00C66E0D0C55BE519A736BD3FE9B6CD9C787032B6AD76D12D3ECB391183DC941B8513B0A33E43F2C8805A99D65008B9250B73A229C7256411F7F85F98F85A2B6411A6490D3A1D75588BD9FC715AE7F59AAA67E4A823E116547CE8572FB63EDA0743E59064C387DCD4376A5247186E739DF3A9DE03D8857996EFA061F5A7D3E8ABFC40BA4377366B4D18E170C48F051478C950F8AA56CE75DD0AC59 P : F18EB645D469319AEBCABBBD5A76BC83EA3BA64B7335814A07F1A8E061B176DF90EA6DAD0B672B0E9C72226CB248FFDA18C1AE50C6B9F407B8EEF7C5049F9F11313D113FB606003CE153D6FD75E102F749E36217B38625EC0D5E8F7B624B555732A05D00CE9603C0D35F0CCF46758D702594DCEF8D853F2E3F699E343BEEA193 Q : C3CCA25577C0D7916AC189EF7C19D09F19643A1101F4B3421B4B98B287EB192B62E271AB429327FCFB1C373D82DF1CE154B16ECC2A59C7B6CB473979E9DD0EFCB546C4578B54513A6F9AA5B9A85E2496766D259D17AFBF3B2AAA05EB98E1C58AA1BC662BCE44845F13A957BC14ED2A1195444123925E988393F484853C4A90B7 DP : 33D296302CFDD472941B8E637540FBF8A10BE30554D629C2A429A83D5B3823749B3670092BE51A4BAC2CA04E0981B7C2268586CC3596375060D083BF74DA79D9CA627B8CDB943600D9A68EFD19890885DD0837473670953A2B341A3C323E4F34C1DBBD982AB9EC5C35FCB256D59AEA9920B6EB1F49914898B76A0552D778BE99 DQ : B7644C08518A465EE5E7311326E1E70D9DF2CA90738C86FA3C26AA774DE75E43CCF2DC14D4DE906DDBA5A9F7EB449F004F1B81F3A9173E807015DE37DA5C3B5567554941D636BB7E485A492F840BE9A9247346EFC4E7CFEDD3203D3B568EE13FE00D5E855945C3D669CC0B691710AC7E9B98BA8A5EE64B63B2892C36BF29F831 IQ : 252F90E2F4A787991A56238CCB539D5C7028AC8CF1F5DCEFB35661C648AACA2C66DCF707B441C4BAD2911F8F1FB820C5212CE796F0910BB2C2F785DF95D1653A0B443E5E21545C1BE4D744C1AA7C213A7DF80982766FF3973C7DD0218B73536856D00B7E1C3394725D6BF669107C058D4B9E2BC99DD88C05D2D1333D59953DD5 DataToDecrypt : 39494AB7C6AE2BF81618CF218FDA69372EEDD66B7D371C0616F52755FB682527B59C1B800E775E417F81383BC54E2B64056E6708F10EC3A9D4D6E75BC67B460E915A2DD3FF7A31FA4E762E302F419EFEAA847B6C669F14FD99DCAE84F86A4C02BB6071FF843BCB886524EFF40DDCB2116CE957A91D1BD94F7ACB3F52F91A7399647E45B9DE37243047624FB0F7E3BFF6EF476789F9124CF43E92E6EACDF4C7183D70BB026AE6C1EC7ACFB71D755F1575AE59B250E112D4E74210185034AADC06AE7072C22944A31152D1581A3F7351F176A0E067D870B3BFAACE34BB2C3AFEF684FC0A427CD70366A2E4703BE39CDA820795D0C690008E45D6F9C7D6711446CB Decrypted plaintext: C#の内部で RSA鍵ファイルを生成して RSAの暗号化と復号化のサ ンプル ======== DER形式の鍵ファイルを C#で読み込んで RSAの暗号化と復号化のサンプル === RSAKeyInfo === M : A34F862E04F6F43FD1958163D26281C15CC1968392597272E616CF0E94551A515525FE352C9D2F4C549407633BC5B5A29010A423213FBD7539A0A6A1C823EA8B303EDBAD41D33B7A43E94CE632CBF2DE1FA5A28E7E9E5135A95CA94CBA84E23FC2C2873AE8EAE22D58D7CBD208103D891D05B37C261950BDA09026364117B3C5B460E35B80F3AFBE68FF67F8EB16A2469C9A3E9420BFBC5876AC6F1EA9B2EE7AAAE7B3A416E4F611EA4A08C6769842188AAF97BE8CD865E8BE8C0632103CA7F28CDDA95FEF2AB253FC8AF8A0BD8B9369D80FC9C8A7EE6572D4EF117D5B8119625C94F448475BDA63748DA186AA35977D2DFFB1515465F8E924BB2726A73005EF Ex : 010001 DataToEncrypt : 444552E5BDA2E5BC8FE381AEE98DB5E38395E382A1E382A4E383ABE38292204323E381A7E8AAADE381BFE8BEBCE38293E381A720525341E381AEE69A97E58FB7E58C96E381A8E5BEA9E58FB7E58C96E381AEE382B5E383B3E38397E383AB === RSAKeyInfo === M : A34F862E04F6F43FD1958163D26281C15CC1968392597272E616CF0E94551A515525FE352C9D2F4C549407633BC5B5A29010A423213FBD7539A0A6A1C823EA8B303EDBAD41D33B7A43E94CE632CBF2DE1FA5A28E7E9E5135A95CA94CBA84E23FC2C2873AE8EAE22D58D7CBD208103D891D05B37C261950BDA09026364117B3C5B460E35B80F3AFBE68FF67F8EB16A2469C9A3E9420BFBC5876AC6F1EA9B2EE7AAAE7B3A416E4F611EA4A08C6769842188AAF97BE8CD865E8BE8C0632103CA7F28CDDA95FEF2AB253FC8AF8A0BD8B9369D80FC9C8A7EE6572D4EF117D5B8119625C94F448475BDA63748DA186AA35977D2DFFB1515465F8E924BB2726A73005EF Ex : 010001 --- D : 7BE76B1B6142E8BFBEC8DAB99CB68651E9892B243A164942299626949E300F5EA3E6C67F1B914A80742F3787AFA2EA932310AD27C62331204E8FB7BD49370ECD79D6471FA5B09910C393AF777C14C6F886344A2828A2FF646251DE554BB2646211E73B6893AD19DB63EB9E45853EA521717690DDE19E156739FA0433E7A10F0FFBE7119DC413720BC0CDBD474FA6B97F5C029F7EC53788680A62A968CCD0261A36B5CF576294E96A06A294845C9CDDB857BB5C8403B245AF258EF7A5F009CED7A21D0CB81324C3FBFD5FBF7A92D97240CC10315356023174CDE72820729BED93C1ABADC0B2747122B7D9BA56A9BB28063F5471D195860C18A20D331AB6FA5AA9 P : CF27D21DB2CDBB02F53D8B782E356EC701A3260A8F465CCD3095B90B46A41F5E18FE8419153177BF749C17CCDE554EAEC99D790CF47163A3765E68BC89CAAF92E383B2AA5ACC832EE2234AFAA0350B4DBBFB9616C5322A51C5ABF143D7E275F08629C8DBE1901B6E314963C70299BE338A629577F287435EBF9027B100389FCD Q : C9D12AE0742E904DDB397F449D1CF594F6C4C4352B85814CC98833806D2632FF08AAA576B8CBE9B485F9FFE940B06AC139AA89160574F83E8A915B394CA38E663C8609326E941D414CBD016B395F2263A19F10DE16D498B6BEF4AC2B2FE9BE80754628ECA96681EA95B523151AB9BCBA0A3319956A3663F41FDEA4FD7C3A68AB DP : 74F4CD8B58ED105DAE2A2E390F15B9D27F99261C26221AB8FA6A3DCC20F8FE80B8E9D198FBBF2F1597F79CF45CBE9B2AD1C7A79569D92EE1162E5D41BD260314928143792CC474781ED2C03D5A0038BE8D98907790A42F0275F10AC93BF4AE93BA9B92BC99D02BBC7DF52A712C85B2BE14AE6E270775D8D280A319D5B403442D DQ : BDB17D3BBBF8886AA5C4457B98B1BFA364CF4E1D2BEB30BD9C3009388D5F7A4F7D35E890CEE1DBA972C4A965F507DD500183E996694AA88B2073BFEAFBBE3FFA98A8E3BC2373D48BAC357B3FED8D1E25C7A45B96649F2F6B95D12482F36621495CF1B545BD743C68E28E7F8B36B39E50BF858866888ED7247F5026849C5FCA41 IQ : B0E15D9D6E10515201D64AE43445CCE1F8952EF28AFE4CC6784FCFFF7F7EEB86352B56158C6AD63DEF2FC952ECFA8D6DB0FC3D2D4C805E628BA5D540DFC8E102B35EF56B6830B2CDDFFA5FD5E5C514080DDD0DFBCA029F172D7899F6F2E8CC7FBC701B40FF574AD961FAFE2CAC573F78B28850E48EB5DF01349CC679C21123E6 DataToDecrypt : 4B57F0ABAAAC196EAEE3953B92FABB2743BF3FEA3D9595912A0E5E6EB770EBD42A5047479FB5A514810197A5C29CE008BB95740925A53DDD6B31F0BCEFC1D56E426A659E0D77EA82612FBA9D97E0F9B8E4A6EF92EDA22875776E076467C82C1DCFAA16259B5696B4A5E09B8B5DCF4D2203504C40A624CE093060DEF78A7C73F9EAF145E9853303692E8867AE41E6E23C6551782BECA63F305C59E77DBF814B0B2EE2CA9A08732E291FC077D637B5B984C9744EB411AF092DAB5486F4FE43901B27B260A5BE6569761152716A8D9A445B5F4F573BFEFE0CB7E5E9D5EE6D231C28CC798FFF398C15A8AA263BF5484CB06FB76421DFF9F5ABD286FAE7E2EADD8F83 Decrypted plaintext: DER形式の鍵ファイルを C#で読み込んで RSAの暗号化と復号化の サンプル
rem C#側で「公開鍵」で暗号化したデータを下記のコマンドラインで「秘密鍵」で RSA復号化できる openssl rsautl -decrypt -inkey private-key.pem -in test.enc -out test_decode.txt
rem C#側で「公開鍵」で暗号化したデータを下記のコマンドラインで「秘密鍵」で RSA復号化できる openssl rsa -in PRIVATEKEY.msblob -inform msblob -out private-cs-key.der -outform DERopenssl rsautl -decrypt -inkey private-cs-key.der -keyform DER -in test_cs.enc -out decode_test_cs.txt openssl rsa -in PRIVATEKEY.msblob -inform msblob -out private-cs-key.pem openssl rsautl -decrypt -inkey private-cs-key.pem -in test_cs.enc -out decode_test_cs.txt