我目前已经开始与Java背景下的PHP一起工作,并且遇到了一些问题。我正在使用mcrypt进行基本加密,使用mcrypt_encrypt (string $cipher , string $key , string $data , string $mode [, string $iv ])
加密成功,但有一种情况是我需要连接2个字符串然后加密它们,但是当我这样做时,输出就像我分别加密每个字符串,然后连接它们之后而不是在加密之前。我做的是这样的:PHP mcrypt - mcrypt crypts每个字符串seperatly级联字符串
function base64url_encode($data) {
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}
function base64url_decode($data) {
return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT));
}
function encryptCode($data){
return mcrypt_encrypt(MCRYPT_DES , '12345678' , $data , 'cbc' ,'87654321');
}
function decryptCode($data){
return mcrypt_decrypt(MCRYPT_DES , '12345678' , $data , 'cbc' ,'87654321');
}
$id = 'Q2JmDpmqjNmGT4FJ2EkXXITOgc31ZA52';
$toAdd = 'hellothere';
$base64Decoded = base64url_decode($id);
$decrypted = decryptCode($base64Decoded);
$decrypted = $decrypted.$toAdd;
$encryptedID = encryptCode($decrypted);
$base64Encoded = base64url_encode($encryptedID);
print_r($base64Encoded);
,然后输出为:Q2JmDpmqjNmGT4FJ2EkXXITOgc31ZA52DG4cvxVuJVnkcrINN0Zt9g
我知道DES的弱点,但我需要它在这种情况下,请有关的评论。感谢大家的帮助。
'myKey'和'myIV'是不可接受的值,因此您发布的代码根本无法正常工作。你应该包括真实的代码,以便我们知道你在这里实际做了什么。 – billynoah
@billynoah是的,我知道他们是不可接受的值,但任何关键或iv导致相同的输出,所以它不是真正的问题在这里,我只是把这些,而不是真正的价值,但不管什么iv和关键是问题仍然存在 –
最好不要使用mcrypt,现在已经抛弃了近十年。因此它已被弃用,并将在PHP 7.2中从核心和PECL中删除。它不支持标准的PKCS#7(néePKCS#5)填充,只有非标准的null填充甚至不能用于二进制数据。 mcrypt有许多可以追溯到2003年的突出错误。相反,考虑使用[defuse](https://github.com/defuse/php-encryption)或[RNCryptor](https://github.com/RNCryptor),它们提供了一个完整的解决方案,正在维护和正确。 – zaph