|
|
|
|
| 暗号強度 | 公開鍵暗号 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