gpt4 book ai didi

java - 用PHP代替JAVA进行PKCS5加密

转载 作者:可可西里 更新时间:2023-11-01 12:57:46 25 4
gpt4 key购买 nike

我的任务是用运行 PHP 的系统替换遗留的 Java 系统。

我在用 PHP 代码替换 Java 加密方面遇到了一些困难。

cipherAlgorythm = "PBEWithMD5AndDES";                           
cipherTransformation = "PBEWithMD5AndDES/CBC/PKCS5Padding";
PBEParameterSpec ps = new javax.crypto.spec.PBEParameterSpec(salt, iterations);
SecretKeyFactory kf = SecretKeyFactory.getInstance(cipherAlgorythm);
SecretKey key = kf.generateSecret(new javax.crypto.spec.PBEKeySpec(password.toCharArray()));
Cipher encryptCipher = Cipher.getInstance(cipherTransformation);
encryptCipher.init(Cipher.ENCRYPT_MODE, key, ps);
byte[] output = encryptCipher.doFinal("This is a test string".getBytes("UTF-8"));

似乎是Java的胆量

我在 PHP 中做

$hashed_key = pbkdf2('md5', $this->key, $this->salt, $this->reps , <GUESS 1>, TRUE);
$output = mcrypt_encrypt(MCRYPT_DES, $hashed_key, "This is a test string", MCRYPT_MODE_CBC, <GUESS 2>);

pbkdf2 来自 here.

所以 <GUESS 1>是 key 大小,<GUESS 2>是IV。我玩过这些都无济于事。有没有人对这些值(value)观有建议?据我所知,加密本身应该是可移植的,但我不确定某些 Java 方法中发生了什么。

看起来 java 正在某处创建 IV,但我不明白如何或在哪里。

相关

Decrypt ( with PHP ) a Java encryption ( PBEWithMD5AndDES )

最佳答案

你可能想看看http://us3.php.net/manual/en/ref.mcrypt.php#69782 ,但基本上他实现了一个 DIY 填充解决方案:

function pkcs5_pad ($text, $blocksize) 
{
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}

这可能是您最好的选择,但如果您查看此评论,他关于如何验证每个步骤是否正确的建议可能对您有用。

https://stackoverflow.com/a/10201034/67566

理想情况下,您应该远离 DES,并且由于此填充将成为 PHP 中的一个问题,为什么不看看您是否可以将加密算法更改为更简单、更安全的算法呢?

为了帮助您可以显示此页面:http://www.ietf.org/rfc/rfc4772.txt ,其中简洁地表示 DES 容易受到暴力攻击,因此已被弃用并替换为 AES。

关于java - 用PHP代替JAVA进行PKCS5加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20639575/

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