c# - RSA算法加解密值
问题描述
我创建了一个通过 RSA 加密和解密的程序。对于某些数值,解密的结果与原始值不匹配。
例如:
- 327:良好的解密
- 512:解密问题
对于加密和解密,我使用BigInteger.ModPow()
.
using System;
using System.Numerics;
namespace ExperimentsWithCryptographicAlgorithms
{
class Program
{
static void Main(string[] args)
{
BigInteger number = new BigInteger(327);
KeyPair keys = new KeyPair();
keys.OpenKey = new Key(new BigInteger(5), new BigInteger(493));
keys.SecurityKey = new Key(new BigInteger(269), new BigInteger(493));
BigInteger hash = Encrypt(number, keys.OpenKey);
if (Decrypt(hash, keys.SecurityKey) == number)
{
Console.WriteLine("Succesfully encrypted / decrypted!");
}
else
{
Console.WriteLine("Error in encryption or decryption!");
}
}
static BigInteger Encrypt(BigInteger encryptedValue, Key publicKey)
{
return BigInteger.ModPow(encryptedValue, publicKey.FirstPart, publicKey.SecondPart);
}
static BigInteger Decrypt(BigInteger decryptedValue, Key securityKey)
{
return BigInteger.ModPow(decryptedValue, securityKey.FirstPart, securityKey.SecondPart);
}
}
public struct Key
{
public BigInteger FirstPart { get; set; }
public BigInteger SecondPart { get; set; }
public Key(BigInteger fPart, BigInteger sPart)
{
FirstPart = fPart;
SecondPart = sPart;
}
}
public struct KeyPair
{
public Key OpenKey { get; set; }
public Key SecurityKey { get; set; }
}
}
解决方案
我检查了你的算法,它适用于 -492 到 492 范围内的数字。这似乎是算法的物理限制,因为最后一个算术运算是与 securityKey.SecondPart 的模数,恰好是 493。
推荐阅读
- javascript - 如何读入具有 href 的 id 元素
- docker - 无法使用“仅/除:更改”创建 CI 管道
- json - 如何在 Angular 应用程序渲染中将对象传递给 @Input 作为 StoryBook 中的故事
- ruby-on-rails - Rails 参数数量错误(给定 1,预期为 0)
- reactjs - 使用 React.createRef() 创建的子组件引用的所有属性在 componentDidMount 方法中未定义
- html - 如何从我的 html 文件创建指向我的 css 文件的路径?
- math - 返回两个变量中较大者的公式
- reactjs - 如何在 Netlify 上发布带有 gatsby-image 的 gatsby 项目?
- python - django-imagekit 在 ImageCacheFile 默认 ctor 函数中抛出 AttributeError 异常
- azure - 带有服务总线队列处理程序的 Azure 事件网格主题订阅