我被要求在 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
“该算法支持以 8 位为增量从 40 位到 1024 位的密钥长度,但 RC2CryptoServiceProvider 实现仅支持以 8 位为增量从 40 位到 128 位的密钥长度。”
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,您就不能使用这个程序。