Perl脚本使用此模块加密字符串 http://search.cpan.org/~zefram/Crypt-Eksblowfish-0.009/lib/Crypt/Eksblowfish.pm
我需要在python中编写解密函数。我知道钥匙和盐。 我试图使用py-bcrypt,但似乎是两个等效函数
$ ciphertext = $ cipher-> encrypt($ plaintext); $ plaintext = $ cipher-> decrypt($ ciphertext);
未实施。
我该怎么办?在任何地方都有一个python模块可以帮助我解密我的字符串吗?
答案 0 :(得分:0)
更新:完整的答案是Perl代码:
my $cipher = Crypt::EksBlowFish->new($cost, $salt, $key);
等同于这个Python代码:
bf = Eksblowfish()
bf.expandkey(salt, key)
for i in xrange(cost << 1):
bf.expandkey(0, key)
bf.expandkey(0, salt)
请参阅此repo,例如代码:https://github.com/erantapaa/python-bcrypt-tests
原始答案:
部分答案......
我假设您正在调用此Perl代码:
use Crypt::EksBlowfish;
my $cipher = Crypt::EksBlowFish->new($cost, $salt, $key);
$encoded = $cipher->encrypt("some plaintext");
new
方法由lib / Crypt / EksBlowfish.xs中的C函数setup_eksblowfish_ks()
实现。这看起来与Python代码(link)
expandKey
方法相同
主要区别在于$cost
参数,它在Python方法中不存在。在Perl代码中,$cost
参数控制在设置密钥计划后执行此循环的次数:
for(count = 1U << cost; count--; ) {
for(j = 0; j != 2; j++) {
merge_key(j == 0 ? expanded_key : expanded_salt, ks);
munge_subkeys(ks);
}
}
Perl ->encrypt()
方法对64位字进行加密。等效的Python代码是:
bf.cipher(xl, xr, bf.ENCRYPT)
其中xl和xr是分别代表左32位和右32位的整数。
所以食谱应该是这样的:
bf = EksBlowfish()
bf.expandkey(salt, key)
bf.cipher(xl, xr, bf.ENCRYPT)