我被要求在Asp.Net站点中实现RC2加密/解密。有些数据需要安全地与其他系统共享,这是已经使用的加密方法。我已尝试了许多不同的方法,但所有实现都有默认的密钥长度,即使算法允许变量密钥长度(http://en.wikipedia.org/wiki/RC2),也无法更改。
我想知道我的分析中是否忽略了某些内容,或者是否有更好的选择。
.Net方法
我的第一种方法是尝试使用.NET RC2CryptoServiceProvider。这不起作用,因为密钥长度有限。
http://msdn.microsoft.com/en-us/library/system.security.cryptography.rc2.keysize.aspx
“此算法支持40位到1024位的密钥长度 增量为8位,但RC2CryptoServiceProvider实现 仅支持从40位到128位的密钥长度,增量为8 位“。
OpenSSL.Net方法
我尝试使用OpenSSL的.NET包装器。 http://sourceforge.net/projects/openssl-net/
它工作正常但它似乎只支持默认加密功能,并且无法更改我找到的密钥长度。
Cipher ciph = Cipher.RC2_CBC;
ciph.KeyLength = 20; // <---- Keylength cannot be assigned to it is readonly
CipherContext RC2 = new CipherContext(ciph);
直接调用OpenSSL
我还尝试通过创建进程并获取输出来通过命令行调用OpenSSL。我遇到了同样的问题,即内置函数不允许变量密钥长度。
http://www.openssl.org/docs/apps/enc.html
enc程序仅支持固定数量的算法 某些参数。因此,例如,如果您想使用带有76的RC2 位密钥或带有84位密钥的RC4,您无法使用该程序。