【发布时间】:2018-02-02 08:01:27
【问题描述】:
我目前正在实施 RSA。我正在使用它来加密 id。而id大多是这样的。例如A1234、A1265、B1234、B2345(在 id 中,第一个字符是 A 或 B,remaing 是数字)。
我正在实现this 链接中描述的 RSA。
我所做的是首先将A替换为1,将B替换为2,然后将其转换为long,然后进行如下加密和解密。
private long Encr(string id)
{
long y = Convert.ToInt64(id.Replace("A", "1").Replace("B", "2"));
return power2(y, e, mod); // e is public key which is number(long)
}
private string Decr(long y)
{
var x= power2(y, d, mod).ToString(); // d is private key which is number(long)
if (x.Substring(0, 1) == "1")
return "A" + x.Substring(1);
if (x.Substring(0, 1) == "2")
return "B" + x.Substring(1);
return "null";
}
private long power2(long x, long y, long n)
{
long temp = 1;
while (y > 0)
{
var z = y & 1;
if (z == 1)
{
temp = ((temp % n) * (x % n)) % n;
}
x = ((x % n) * (x % n)) % n;
y = y >> 1;
}
return temp;
}
而且我还使用了 .NET 提供的 RSA。我对这两种方法的结果感到惊讶(一种是我实现的,另一种是 .NET 提供的)。 结果是这样的。
id | My Method | .NET RSA
--------|--------------------------------------|-------------
A1234 |Encryption:-time=0.0000017 s |Encryption:- time=0.0001047 s
| value=56485 | value=0aR+BrYbO8eMFaQQz12QMw==
|Decryption:-time=0.0000117 s |Decryption:- time=0.0001132 s
| value=11234 | value=A1234
我不明白为什么这两者有很大的不同。 是不是我的方法做错了(我的方法有什么漏洞)?
我想要快速的加密解密方法。所以我实施的是正确的,否则我的方法有可能发生冲突。或者我必须使用其他非常快的加密和解密方法。
【问题讨论】:
-
从您的方法输出中,您要么打错字,要么不工作
-
请注意,系统库可能正在使用填充。类似于 Wikipedia 上的描述的“教科书”RSA完全不安全。
-
为了进行比较,您需要显示您已计时的 .NET RSA 代码。
标签: c# .net encryption cryptography