C#_RSAの復号化と署名検証
C#_RSAの復号化と署名検証
RSA暗号化アルゴリズムは非対称暗号化アルゴリズムである.公開鍵暗号化規格や電子商取引ではRSAが広く用いられている.RSAは1977年、ロナルド・リーベスター、アディ・サモア、レンナード・アドマンが共同で提案した.当時、彼ら3人はマサチューセッツ工科大学で働いていた.RSAは彼ら3人の姓の頭文字をつづったものだ.のNetの発売で、私たちは利用することができます.Net Frameworkのクラスが提供する暗号化サービスは、データのセキュリティを保証します.現在広く応用されている暗号化方法はRSAアルゴリズムを用いて暗号化されている.はい.Net Frameworkでは、RSA暗号化アルゴリズムに関連するクラスは、主に2つあります.RSAクラスとRSACryptoServiceProviderクラスです.MSDNによるとRSAクラスは「RSAアルゴリズムのすべての実装が継承されていることを示すベースクラス」であり、RSACryptoServiceProviderクラスは「暗号化サービスプロバイダ(CSP)が提供するRSAアルゴリズムの実装を用いて非対称暗号化と復号化を実行する」というものである.また,「RSAアルゴリズムを表す標準パラメータ」のRSAParameters構造も重要であり,RSAアルゴリズムのパラメータを保存している.
公開鍵と秘密鍵ファイルの生成
暗号化と復号化
署名と署名の検証
RSA暗号化アルゴリズムは非対称暗号化アルゴリズムである.公開鍵暗号化規格や電子商取引ではRSAが広く用いられている.RSAは1977年、ロナルド・リーベスター、アディ・サモア、レンナード・アドマンが共同で提案した.当時、彼ら3人はマサチューセッツ工科大学で働いていた.RSAは彼ら3人の姓の頭文字をつづったものだ.のNetの発売で、私たちは利用することができます.Net Frameworkのクラスが提供する暗号化サービスは、データのセキュリティを保証します.現在広く応用されている暗号化方法はRSAアルゴリズムを用いて暗号化されている.はい.Net Frameworkでは、RSA暗号化アルゴリズムに関連するクラスは、主に2つあります.RSAクラスとRSACryptoServiceProviderクラスです.MSDNによるとRSAクラスは「RSAアルゴリズムのすべての実装が継承されていることを示すベースクラス」であり、RSACryptoServiceProviderクラスは「暗号化サービスプロバイダ(CSP)が提供するRSAアルゴリズムの実装を用いて非対称暗号化と復号化を実行する」というものである.また,「RSAアルゴリズムを表す標準パラメータ」のRSAParameters構造も重要であり,RSAアルゴリズムのパラメータを保存している.
公開鍵と秘密鍵ファイルの生成
using System.Security.Cryptography;
using System.IO;
///
/// 、
///
/// ,
/// ,
public void RSAKey(string PrivateKeyPath, string PublicKeyPath)
{
RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
SaveKey(PrivateKeyPath, provider.ToXmlString(true));//
SaveKey(PublicKeyPath, provider.ToXmlString(false));//
}
///
/// /
///
/// /
/// /
public void SaveKey(string path, string key)
{
FileStream stream = new FileStream(path, FileMode.Create);
StreamWriter sw = new StreamWriter(stream);
sw.WriteLine(key);
sw.Close();
stream.Close();
}
暗号化と復号化
///
/// RSA
///
///
///
/// RSA
public string RSAEncrypt(string xmlPublicKey, string m_strEncryptString)
{
string str2;
try
{
RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
provider.FromXmlString(xmlPublicKey);
byte[] bytes = new UnicodeEncoding().GetBytes(m_strEncryptString);
str2 = Convert.ToBase64String(provider.Encrypt(bytes, false));
}
catch (Exception exception)
{
throw exception;
}
return str2;
}
///
/// RSA
///
///
///
///
public string RSADecrypt(string xmlPrivateKey, string m_strDecryptString)
{
string str2;
try
{
RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
provider.FromXmlString(xmlPrivateKey);
byte[] rgb = Convert.FromBase64String(m_strDecryptString);
byte[] buffer2 = provider.Decrypt(rgb, false);
str2 = new UnicodeEncoding().GetString(buffer2);
}
catch (Exception exception)
{
throw exception;
}
return str2;
}
署名と署名の検証
///
///
///
///
///
///
public string SignatureFormatter(string p_strKeyPrivate, string m_strHashbyteSignature)
{
byte[] rgbHash = Convert.FromBase64String(m_strHashbyteSignature);
RSACryptoServiceProvider key = new RSACryptoServiceProvider();
key.FromXmlString(p_strKeyPrivate);
RSAPKCS1SignatureFormatter formatter = new RSAPKCS1SignatureFormatter(key);
formatter.SetHashAlgorithm("MD5");
byte[] inArray = formatter.CreateSignature(rgbHash);
return Convert.ToBase64String(inArray);
}
///
///
///
///
///
///
///
public bool SignatureDeformatter(string p_strKeyPublic, string p_strHashbyteDeformatter, string p_strDeformatterData)
{
try
{
byte[] rgbHash = Convert.FromBase64String(p_strHashbyteDeformatter);
RSACryptoServiceProvider key = new RSACryptoServiceProvider();
key.FromXmlString(p_strKeyPublic);
RSAPKCS1SignatureDeformatter deformatter = new RSAPKCS1SignatureDeformatter(key);
deformatter.SetHashAlgorithm("MD5");
byte[] rgbSignature = Convert.FromBase64String(p_strDeformatterData);
if (deformatter.VerifySignature(rgbHash, rgbSignature))
{
return true;
}
return false;
}
catch
{
return false;
}
}