【问题标题】:Substitute Horde/phpmyadmin blowfish.php for mcrypt用 Horde/phpmyadmin blowfish.php 替换 mcrypt
【发布时间】:2012-06-28 12:56:12
【问题描述】:

我正在尝试在使用 Horde/phpmyadmin blowfish.php library 加密的应用程序之间传递数据,而改用 mcrypt。如果我这样做:

$key = "qwerty";
$data = "12345678";

$pma_cipher = new Horde_Cipher_blowfish;

print base64_encode( mcrypt_encrypt( MCRYPT_BLOWFISH, $key, $data, MCRYPT_MODE_CBC ) );
print PMA_blowfish_encrypt( $data, $key );
print base64_encode( $pma_cipher->encryptBlock( $data, $key ) );
print base64_encode( $pma_cipher->encryptBlock( $data, $key ) );

输出是

pC+XbHWnqIg= // mcrypt
pC+XbHWnqIg= // PMA blowfish
pC+XbHWnqIg= // OK
WwkIWeYzlHw= // next block is different

此外,如果我更改数据:

$key = "qwerty";
$data = "123456789";

$pma_cipher = new Horde_Cipher_blowfish;

print base64_encode(mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $data, MCRYPT_MODE_CBC));
print PMA_blowfish_encrypt( $data, $key );

我现在明白了:

pC+XbHWnqIjaCTiQlKkXRQ==
pC+XbHWnqIg99GXjyWLMmA==

Horde/PMA 版本似乎每个区块都在更改密钥。

有没有办法调整 mcrypt 调用以使两个库交叉兼容,或者我应该只选择其中一个并相应地进行调整?

【问题讨论】:

    标签: php mcrypt blowfish


    【解决方案1】:

    每次在同一实例上设置密钥时,河豚的 s-box 都会因设计而异。这就是 bcrypt 哈希的工作原理。

    我相信你应该做的是:

    $pma_cipher = new Horde_Cipher_blowfish;
    
    $pma_cipher->setKey( $key ); // Set the key only once!
    
    print base64_encode( mcrypt_encrypt( MCRYPT_BLOWFISH, $key, $data, MCRYPT_MODE_CBC ) );
    print PMA_blowfish_encrypt( $data, $key );
    print base64_encode( $pma_cipher->encryptBlock( $data ) ); // specifying the key resets it
    print base64_encode( $pma_cipher->encryptBlock( $data ) ); // specifying the key resets it
    

    这应该每次都给你相同的结果。

    关于你的其他问题:

    我应该选择其中一个并相应地进行调整

    如果可能,您应该使用 mcrypt_* 函数,因为它们比 PMA 使用的原始 PHP 实现快很多。首先,河豚的速度非常慢(至少在键设置方面);在 PHP 而不是 C 库中这样做应该只是一个后备。

    【讨论】:

    • 我正在尝试兼容为每个 8 字节块指定密钥的代码 - 我可以使用 mcrypt 函数重新指定密钥吗?
    • 并非如此。您可以手动进行键混合(通过从Horde_Cipher_blowfish 复制函数源),也可以在每次调用encryptBlock() 之前重新初始化$pma_cipher
    猜你喜欢
    • 2012-04-17
    • 2018-08-29
    • 2013-06-29
    • 2020-05-17
    • 2017-04-25
    • 1970-01-01
    • 2017-01-20
    • 2021-05-05
    相关资源
    最近更新 更多