在“普通”perl中模拟openssl rc4-40

时间:2013-09-19 00:23:31

标签: perl openssl rc4-cipher

我已经尝试了几个小时而没有太多运气,虽然我怀疑这只是我的密集。

首先是设置,所以你不会试着说出来。 :P我有一个对其openssl lib有限制的盒子,这样它就不会像40位那样低加密rc4。我有一个使用rc4-40的遗留函数,我不能自由地将加密升级到更难的位,因为它说的是我无法控制或授权的其他软件。

因此,约束到40位RC4并且不能使用openssl。任何不会回到openssl的XS / perl都应该很棒。我一直在玩几个模块,但没有任何工作开箱即用,我不擅长这种事情,所以无法看到如何自己修改/ monkey-patch / fork密钥/位处理代码。

代码目前正在执行此操作 -

echo -ne "OHAI" |  openssl rc4-40 -d -nosalt -k  KeyPhrase0123456 | xxd
0000000: cbf7 71b2                                ..q.

Naïve刺伤替换它是由FAIL制成的 -

perl -MCrypt::RC4 -e 'print RC4("KeyPhrase0123456", "OHAI")' | xxd
0000000: bc14 808b                                ....

所以我需要一些版本的perl代码来匹配openssl调用。我一直在尝试一切合理的(c.f.,而不是基于openssl)我可以在CPAN上找到,包括Crypt::RC4::XS)和Net::SSH::Perl::Cipher::RC4。谷歌引导我在Authen::SASL中找到了一些明显相关且经过改编的代码 - 除了它似乎支持rc4-40的身份验证之外,它太难以理解了。我没有尝试Crypt::GCrypt虽然看起来很有希望,但我看不出正确的用法。阻碍。

这 - RC4 doesn't work correctly with openssl command?   - 正在启发,但最终没有帮助我处理或设置关键/短语。

感谢您的期待!

更新:在FIPS mode上阅读了更多内容之后,我认为即使我知道是否正确的调用,Crypt :: GCrypt也将无法正常运行。

1 个答案:

答案 0 :(得分:1)

echo -ne "OHAI" |  openssl rc4-40 -d  -nosalt -k KeyPhrase0123456 | xxd
0000000: cbf7 71b2                                ..q.

perl -MCrypt::RC4 -MDigest::MD5 -e 'print RC4(substr(Digest::MD5::md5("KeyPhrase0123456"),0,5), "OHAI")' | xxd
0000000: cbf7 71b2                                ..q.

substr(Digest::MD5::md5("KeyPhrase0123456"),0,5) - 5*8=40bit