当前位置:  开发笔记 > 人工智能 > 正文

使用RSA加密的加密数据大小(RSACryptoServiceProvider)

如何解决《使用RSA加密的加密数据大小(RSACryptoServiceProvider)》经验,为你挑选了1个好方法。

我需要在我正在开发的项目中使用一些加密机制.我正在探索RSA加密并编写了一些示例程序来学习.

据我所知,RSA加密的块大小为16字节.所以我给字符串"12345678"作为下面函数的输入:

public static string Encrypt (string input) {
    var byteConverter = new UnicodeEncoding ();

    RSACryptoServiceProvider cruptoEngine = new RSACryptoServiceProvider();
    byte[] output = cruptoEngine.Encrypt (byteConverter.GetBytes (input), false);
    return BytesToString (output); //BytesToString () converts the bytes to hex string
}

现在我得到的加密字符串是128个字节(256个十六进制字符).这个字符串对我来说太大了.如果我提供16字节的普通数据,我有点希望得到16字节的加密数据.难道我做错了什么?这是应该发生的吗?我可以以某种方式缩短加密数据吗?



1> Rasmus Faber..:

你误会了.RSA不是分组密码,因此您无法真正谈论它的块大小.

RSA加密的输出将具有与RSA模数相同的长度.您没有在代码中指出任何RSA密钥,因此运行时(据我记忆)使用默认密钥.该密钥显然具有1024位模数,这解释了输出长度.

您可能希望查看AES加密.出于多种原因,您通常只应使用RSA加密密钥,然后使用AES或类似的对称密码算法来加密您的实际文本.

AES是块大小为16字节的块密码,因此(取决于您使用的填充以及传输初始化向量的方式)将16字节的普通数据加密为16字节的加密数据.

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有