C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 57 を表示中)
■32697 / )  Re[8]: べき乗計算の結果
□投稿者/ chobi (18回)-(2009/02/12(Thu) 22:59:22)
分からなくなりましたが、最近どこかのサイト見て作ったencrypt/decryptするソースです。
私も最近暗号にはまっています。(あまり関係ないかもしれませんが、思わず書き込みしてしまいました)
下記に公開鍵と秘密鍵の作り方を単純化したアルゴリズムありますが、実際はもちっと複雑です。
http://itpro.nikkeibp.co.jp/article/COLUMN/20071031/286010/?ST=lin-os
「秘密の国のアリス」という結構人気の暗号の本を読むと良く分かります。

private void button1_Click(object sender, EventArgs e)
{
//公開鍵と秘密鍵の作成
string publickey;
string privatekey;
Crypt.CreateKeys(out publickey, out privatekey);

//TextBox1を暗号化してtextbox2に表示する
textBox2.Text = Crypt.Encrypt(textBox1.Text, publickey);

//textbox2を復号化してtextbox3に表示する
textBox3.Text = Crypt.Decrypt(textBox2.Text, privatekey);

textBox4.Text = publickey;
textBox5.Text = privatekey;

}

}

public class Crypt
{
public static void CreateKeys(out string publicKey, out string privateKey)
{
//RSACryptoServiceProviderオブジェクトの作成
System.Security.Cryptography.RSACryptoServiceProvider rsa =
new System.Security.Cryptography.RSACryptoServiceProvider();

//公開鍵をXML形式で取得
publicKey = rsa.ToXmlString(false);
//秘密鍵をXML形式で取得
privateKey = rsa.ToXmlString(true);
}

public static string Encrypt(string str, string publicKey)
{
//RSACryptoServiceProviderオブジェクトの作成
System.Security.Cryptography.RSACryptoServiceProvider rsa =
new System.Security.Cryptography.RSACryptoServiceProvider();

//公開鍵を指定
rsa.FromXmlString(publicKey);

//暗号化する文字列をバイト配列に
byte[] data = System.Text.Encoding.UTF8.GetBytes(str);
//暗号化する
//(XP以降の場合のみ2項目にTrueを指定し、OAEPパディングを使用できる)
byte[] encryptedData = rsa.Encrypt(data, false);

//Base64で結果を文字列に変換
return System.Convert.ToBase64String(encryptedData);
}

public static string Decrypt(string str, string privateKey)
{
//RSACryptoServiceProviderオブジェクトの作成
System.Security.Cryptography.RSACryptoServiceProvider rsa =
new System.Security.Cryptography.RSACryptoServiceProvider();

//秘密鍵を指定
rsa.FromXmlString(privateKey);

//復号化する文字列をバイト配列に
byte[] data = System.Convert.FromBase64String(str);
//復号化する
byte[] decryptedData = rsa.Decrypt(data, false);

//結果を文字列に変換
return System.Text.Encoding.UTF8.GetString(decryptedData);
}
}
}
返信 編集キー/


管理者用

- Child Tree -