【发布时间】:2013-12-22 23:16:07
【问题描述】:
我正在尝试制作自己的 RSA 加密。我知道 C# 中有内置方法,但我想制作自己的程序,因为我想了解它是如何完成的。我想我在转换字节数组时搞砸了。如果有人能把我推向正确的方向,那就太好了:)。
private void btnEncrypt_Click(object sender, EventArgs e)
{
EncryptieModulo = 55;
PublicKey = 27;
var PlainText = Encoding.UTF8.GetBytes(txtPlaintext.Text);
for (int i = 0; i < PlainText.Length; i++)
{
PlainText[i] = (byte)(BigInteger.Pow(PlainText[i], PublicKey) % EncryptieModulo);
}
textBox1.Text = Convert.ToBase64String(PlainText);
}
private void btnDecrypt_Click(object sender, EventArgs e)
{
EncryptieModulo = 55;
PrivateKey = 3;
var CrypText = Convert.FromBase64String(txtCCryptedText.Text);
for (int i = 0; i < CrypText.Length; i++)
{
CrypText[i] = (byte)(BigInteger.Pow(CrypText[i], PrivateKey) % EncryptieModulo);
}
textBox1.Text = Encoding.UTF8.GetString(CrypText);
}
【问题讨论】:
-
请通过示例输入和输出解释这段代码的作用,并解释它应该做什么以及您尝试调查这些差异的原因。
-
当我加密字符串“Pablo”时,它返回“FDAgJQE="。现在,当我尝试解密它时,它会返回字符串“*+5”。
-
@CodeCaster:从代码中我可以看出,他正在尝试实现非常基本的 RSA 以了解其工作原理。或多或少在这里描述的en.wikipedia.org/wiki/RSA_%28cryptosystem%29#A_working_example 基于此emc.com/emc-plus/rsa-labs/pkcs/files/… 的完整实现不会那么简单,但他只是试图以最基本的形式解决 RSA 的内部工作原理。
-
是的,谢谢 zespri,这就是我想要做的。
-
只需坚持使用字节数组进行加密/解密方法并让该部分正常工作。比弄清楚你的 string->byte->string 序列是否/为什么被破坏。