コードはこんなかんじ。このサンプルでは、動的に公開鍵と秘密鍵を生成しています。
(ボタン押下の処理です。txtOriginalとtxtHashはTextBox。共通処理は3DESと同じ)
//公開鍵をXML形式で取得
private string publicKey = string.Empty;
//秘密鍵をXML形式で取得
private string privateKey = string.Empty;
/// <summary>
/// RSAで暗号化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnRSAC_Click(object sender, EventArgs e)
{
//対象を16進バイト列化
byte[] data = Encoding.UTF8.GetBytes(txtOriginal.Text);
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
//公開鍵・秘密鍵をこのタイミングで生成する
publicKey = rsa.ToXmlString(false);
privateKey = rsa.ToXmlString(true);
//公開鍵を指定
rsa.FromXmlString(publicKey);
//バイト列を暗号化
byte[] encData = rsa.Encrypt(data, true);
//16進数文字列に変換
txtHash.Text = byte2HexString(encData);
}
}
/// <summary>
/// RSAで複合化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnRSAD_Click(object sender, EventArgs e)
{
byte[] data = hexString2Byte(txtHash.Text);
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
//秘密鍵を指定
rsa.FromXmlString(privateKey);
//バイト列を複合化
byte[] decData = rsa.Decrypt(data, true);
// 複合化されたデータを取得
string code = Encoding.UTF8.GetString(decData);
txtRestre.Text = code;
}
}
private string publicKey = string.Empty;
//秘密鍵をXML形式で取得
private string privateKey = string.Empty;
/// <summary>
/// RSAで暗号化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnRSAC_Click(object sender, EventArgs e)
{
//対象を16進バイト列化
byte[] data = Encoding.UTF8.GetBytes(txtOriginal.Text);
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
//公開鍵・秘密鍵をこのタイミングで生成する
publicKey = rsa.ToXmlString(false);
privateKey = rsa.ToXmlString(true);
//公開鍵を指定
rsa.FromXmlString(publicKey);
//バイト列を暗号化
byte[] encData = rsa.Encrypt(data, true);
//16進数文字列に変換
txtHash.Text = byte2HexString(encData);
}
}
/// <summary>
/// RSAで複合化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnRSAD_Click(object sender, EventArgs e)
{
byte[] data = hexString2Byte(txtHash.Text);
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
//秘密鍵を指定
rsa.FromXmlString(privateKey);
//バイト列を複合化
byte[] decData = rsa.Decrypt(data, true);
// 複合化されたデータを取得
string code = Encoding.UTF8.GetString(decData);
txtRestre.Text = code;
}
}
1 件のコメント:
こんばんは。
実際に自分で作ってみるのも面白いですね!
コメントを投稿