c# - RSA 加密返回不同的输出

标签 c# encryption cryptography rsa system.security

我是 RSA 加密的新手,我一直在尝试使用 .Net 的 System.Security.Cryptography 了解它的工作原理。

    public String Encryption(Byte[] Input, RSAParameters PublicKey)
    {
        RSAC = new RSACryptoServiceProvider();
        RSAC.ImportParameters(PublicKey);
        Byte[] Encrypt = RSAC.Encrypt(Input, false);
        return Convert.ToBase64String(Encrypt);
    }

使用上面的代码,每当我重新启动应用程序时,我都会为相同的输入获得不同的加密字符串。我想知道这是否是正常行为,如果不是,如何预防。

例如,程序为输入“Hello”返回以下字符串:

NopDAF5FRu....

当我重新启动应用程序时,相同输入的输出将是:

pPPu8x6....

但是,当我为我的 RSA 加密类创建新对象时,所有对象都返回相同的输出。

最佳答案

这是完全正常的。被加密的数据被放入一个用随机值填充的 block 中。然后使用公钥对其进行加密。

查看此 SO Q&A了解更多详情。

关于c# - RSA 加密返回不同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20020189/

相关文章:

c# - 用于 C#/Silverlight/.NET 音频/视频实时流的跨平台开放库

c# "task method"也可以是 "async"方法吗?

ios - 使用解密时,表达式类型不明确,没有更多 AES 上下文

java - Android XML RSA,错误 : java. security.InvalidKeyException:传递给 RSA 的未知 key 类型

java - 用 C# 解密用 Java 加密的密码

c# - CSP 未检测到智能卡微型驱动程序 C#

c# - 如何使用子类型鉴别器?

c# - 使用 CaSTLe Windsor 注入(inject)日志依赖

php - 如何使用 laravel 4 邮件方法设置 hotmail?

Java - 为什么我的 AES 程序不加密/解密双引号?