【问题标题】:Perl Crypt-Eksblowfish Cypher encrypted string and must be decrypted in pythonPerl Crypt-Eksblowfish Cypher 加密字符串,必须在 python 中解密
【发布时间】:2018-04-09 20:31:55
【问题描述】:

一个 Perl 脚本使用这个模块来加密字符串 http://search.cpan.org/~zefram/Crypt-Eksblowfish-0.009/lib/Crypt/Eksblowfish.pm

我需要在 python 中编写解密函数。我知道钥匙和盐。 我尝试使用 py-bcrypt 但似乎两个等效函数

$ciphertext = $cipher->encrypt($plaintext); $plaintext = $cipher->解密($ciphertext);

未实施。

我该怎么办?是否有任何地方可以帮助我解密字符串的python模块?

【问题讨论】:

  • 找出最后一块拼图并更新了我的答案。

标签: python perl encryption bcrypt blowfish


【解决方案1】:

更新:完整的答案是 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方法一样@

主要区别在于 Python 方法中不存在 $cost 参数。在 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 -&gt;encrypt() 方法加密一个 64 位字。等效的 Python 代码是:

bf.cipher(xl, xr, bf.ENCRYPT)

其中 xl 和 xr 是分别代表左 32 位和右 32 位的整数。

所以食谱应该是这样的:

  1. 创建 Python 对象:bf = EksBlowfish()
  2. 初始化密钥计划:bf.expandkey(salt, key)
  3. 使用成本参数 (TBD) 进一步调整关键计划
  4. bf.cipher(xl, xr, bf.ENCRYPT)加密

【讨论】:

  • 嗨,谢谢你的食谱。我要试着煮它。我带着结果回来找你,或者……也许还有一个问题。但听起来不错。非常感谢您的帮助。
  • 事实证明,python-bcrypt-0.3.1 包中的bcrypt.hashpw() 可能就是你要找的东西。
猜你喜欢
  • 2015-02-20
  • 2012-05-04
  • 2022-09-27
  • 2015-02-04
  • 1970-01-01
  • 1970-01-01
  • 2012-11-18
  • 1970-01-01
相关资源
最近更新 更多