如何将字符串转换为唯一的数值(BigInteger)?

时间:2012-10-27 10:48:08

标签: c# string encoding cryptography rsa

我正在做一个RSA项目,我在其中加密和解密在调用时获取BigInteger值的函数,并返回encrytstd或解密的BigInteger值。我从用户(从文本框)获取加密或解密的数字,并将其发送到正确的功能。当用户在文本框中输入数值时,这项工作很好,但现在我尝试使其适用于用户提供的任何字符串(数字,字母和特殊字符),因此我需要将输入字符串转换为唯一的BigInteger值,以便我可以正确地解密和加密它。我尝试使用UTF8编码和Ascii编码(将字符串转换为字节数组,将字节数组转换为biginteger并将biginteger发送到正确的函数)。两者都不能很好地工作,因为在使用上述方法加密后我无法解密消息,在我将bigniteger值转换回字符串后,它只显示了很多奇怪的字符("?& #34;和sqaures)。那么我怎样才能使其工作以及将字符串转换为唯一BigInteger的最佳方法是什么?

非常感谢

P.S。我在C#中做项目

2 个答案:

答案 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());

答案 1 :(得分:0)

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

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