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

C# 如何将字符串转换为唯一的数值(BigInteger)?,c#,string,encoding,cryptography,rsa,C#,String,Encoding,Cryptography,Rsa,我正在做一个RSA项目,在这个项目中,我有加密和解密函数,这些函数在调用时获取一个BigInteger值,并返回encrypetd或解密的BigInteger值。我从用户(从textbox)获取要加密或解密的数字,并将其发送到适当的函数。当用户在文本框中输入数值时,这种方法很有效,但现在我尝试使其适用于用户提供的任何字符串(数字、字母和特殊字符),因此我需要将输入字符串转换为唯一的BigInteger值,以便正确解密和加密。我尝试使用UTF8编码和Ascii编码(将字符串转换为字节数组,将字节数

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

非常感谢

p、 我在C#

中做这个项目,你可以使用数据类型来存储大量的数字。静态TryParse方法将字符串转换为任意大的数字

Using System.Numerics
BigInteger number;
BigInteger.TryParse("4565653454454544423", out number);
您可以使用数据类型来存储大量数字。静态TryParse方法将字符串转换为任意大的数字

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

你想做这样的东西吗

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

你想做这样的东西吗

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

我已经使用了BigInteger数据类型,并将其发送给加密和解密函数。例如,当输入为“259327521”(我可以加密和解密这些输入)时,这种方法很有效,但是当输入包含字母或特殊字符“hello This is secret message!”时,这种方法不起作用,所以我尝试将这种字符串转换为BigInteger(使用UTF8编码和Ascii编码)但是没有成功,因为加密后我无法正确解密密码,而且在尝试将BigInteger转换回字符串后我得到了奇怪的字符。你能发布转换非数字字符串的代码吗?我已经使用了BigInteger数据类型,并将其发送给加密和解密函数。例如,当输入为“259327521”(我可以加密和解密这些输入)时,这种方法很有效,但是当输入包含字母或特殊字符“hello This is secret message!”时,这种方法不起作用,所以我尝试将这种字符串转换为BigInteger(使用UTF8编码和Ascii编码)但是没有成功,因为加密后我无法正确解密密码,而且在尝试将BigInteger转换回字符串后我得到了奇怪的字符。你能发布转换非数字字符串的代码吗?如果没有更多输入(所需的协议和源代码),我们无法解决这个问题。此外,这听起来像是一个本地问题,需要一些本地调试。为什么您希望自己实现RSA而不是使用
RSA
类?如果您自己实现它,您将需要实现OAEP填充并避免侧通道攻击,这两种攻击都很容易出错。如果你把它们弄错了,它会在完全不安全的情况下工作。如果没有更多的输入(所需的协议和源代码),我们无法解决这个问题。此外,这听起来像是一个本地问题,需要一些本地调试。为什么您希望自己实现RSA而不是使用
RSA
类?如果您自己实现它,您将需要实现OAEP填充并避免侧通道攻击,这两种攻击都很容易出错。如果你把它们弄错了,它会在完全不安全的情况下工作。