gpt4 book ai didi

php - DES/ECB/PKCS5Padding PHP解密

转载 作者:搜寻专家 更新时间:2023-10-31 22:13:10 25 4
gpt4 key购买 nike

我需要用 PHP(或 Javascript)解密一些服务调用。我花了一整天的时间试图完成这个,但我一直无法正确解密它。

作为引用,服务提供商向我发送了以下 Java 解密示例代码:

DESKeySpec dks = new DESKeySpec("keyword".getBytes()); 
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey key = keyFactory.generateSecret(dks);

Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
SecureRandom sr = new SecureRandom();
cipher.init( Cipher.DECRYPT_MODE, key ,sr);

byte b[] = response.toByteArray();
byte decryptedData[] = cipher.doFinal( b );

我认为我使用的是正确的路径:

$td = mcrypt_module_open(MCRYPT_DES, '', 'ecb', '');
$iv_size = mcrypt_enc_get_iv_size($td);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$key = substr($keyword, 0, mcrypt_enc_get_key_size($td));
mcrypt_generic_init($td, $key, $iv);
$decrypted = mdecrypt_generic($td, $data);
$decrypted = pkcs5_unpad($decrypted);

但是,坦率地说,我确信我在 $iv creationg 和 $keyword 设置(或者可能是 $data 或 $decrypted 类型?)方面搞砸了一切。 pkcs5_unpad函数如下:

function pkcs5_unpad($text)
{
$pad = ord($text{strlen($text)-1});
if ($pad > strlen($text)) return false;
return substr($text, 0, -1 * $pad);
}

我不仅是 php 的菜鸟,而且还是密码学技术的菜鸟...请问您能帮我解决这个问题吗?

最佳答案

确保您的 key 由相同的字节组成(字符串的编码可能不同)并向其提供一个填充零的 IV。 ECB 模式不使用 IV(并且 PHP 手册指定了那么多),但是如果您确实给它一个默认值,则它全为零 - IV 将与第一个纯文本 block 进行异或运算,因此将其设置为全零将取消该操作。另外,请确保输入的密码数据相同。首先忽略填充,您应该能够在取消填充之前检查结果是否正确。

关于php - DES/ECB/PKCS5Padding PHP解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10197249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com