0

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

多谢

ps 我用 C# 做项目

4

2 回答 2

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());
于 2012-10-27T11:24:11.610 回答
0

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

Using System.Numerics
BigInteger number;
BigInteger.TryParse("4565653454454544423", out number);
于 2012-10-27T10:53:29.243 回答