加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

用PHP替换JAVA以进行PKCS5加密

发布时间:2020-12-13 17:55:01 所属栏目:PHP教程 来源:网络整理
导读:我的任务是用运行 PHP的东西替换遗留的java系统. 我在用PHP代码替换java加密时遇到了一点困难. cipherAlgorythm = "PBEWithMD5AndDES"; cipherTransformation = "PBEWithMD5AndDES/CBC/PKCS5Padding"; PBEParameterSpec ps = new javax.crypto.spec.PBEParam
我的任务是用运行 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>是关键尺寸和< GUESS 2>是IV.我玩过这些无济于事.有没有人对这些价值观有所建议?据我所知,加密本身应该是可移植的,但我不确定某些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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读