2012-10-27 62 views
0

我正在做一个RSA项目,在这个项目中,我调用了加密和解密函数,这些函数在调用时获取BigInteger值并返回encrypetd或解密的BigInteger值。我从用户(从文本框)获得加密或解密的号码并将其发送到适当的功能。当用户在文本框中输入数值时,这种工作很好,但现在我试图使它适用于用户给出的任何字符串(数字,字母和特殊字符),所以我需要将输入字符串转换为唯一的BigInteger值我可以正确解密和加密它。我尝试使用UTF8编码和Ascii编码(将字符串转换为字节数组,将字节数组转换为biginteger并将biginteger发送到正确的函数)。两者都不能正常工作,因为在使用上述方法加密后,我无法解密邮件,并且在将bigniteger值转换回字符串之后,它只显示了很多奇怪的字符(“?”和sqaures)。那么,如何让它工作以及将字符串转换为唯一的BigInteger的最佳方法是什么?如何将字符串转换为唯一的数值(BigInteger)?

非常感谢

p.s.我在C#中执行该项目

+0

如果没有更多的输入(所需的协议和源代码),我们无法解决这个问题。此外,这听起来像是需要本地调试的本地问题。 –

+0

为什么你想自己实现RSA而不是使用'RSA'类?如果你自己实现它,你需要实现OAEP填充和避免边信道攻击,这两种攻击都很容易出错。如果你弄错了,它会在完全不安全的情况下工作。 – CodesInChaos

回答

0

可以使用BigInteger数据类型来存储大数字。静态TryParse方法将字符串转换为任意大数字。

Using System.Numerics 
BigInteger number; 
BigInteger.TryParse("4565653454454544423", out number); 
+0

我已经使用BigInteger数据类型,并将其发送给加密和解密函数。例如,当输入为“259327521”时(例如,我可以加密和解密这些输入),这可以很好地工作,但是当输入包含字母或特殊字符时,这不起作用“您好,这是秘密消息!所以我试图做的是将这种字符串转换为BigInteger(使用UTF8编码和Ascii编码),但没有成功,因为我无法在加密后正确解密密码,并且在尝试转换后出现奇怪的字符BigInteger返回到字符串。 –

+0

你可以发布转换非数字字符串的代码 –

3

你想让这样的事情?

string input = "hello this is secret message!"; 

BigInteger bi = new BigInteger(Encoding.UTF8.GetBytes(input)); 

//Encrypt :) 
var ebi = bi * 5; 
var encString = Convert.ToBase64String(ebi.ToByteArray()); 

//Decrypt :) 
var ebi2 = new BigInteger(Convert.FromBase64String(encString));   
var dbi = ebi2/5; 

string output = Encoding.UTF8.GetString(dbi.ToByteArray()); 
+0

像这样的东西: –