Как реализовать шифрование данных на php? Вот пример на jsfunction decryptRandomNumber (pwdHash, encryptedRandomNumber) { var key = CryptoJS.enc.Utf8.parse(pwdHash); var encrypted = CryptoJS.enc.Hex.parse(encryptedRandomNumber.toUpperCase()); var result = CryptoJS.AES.decrypt({ ciphertext: encrypted }, key , { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }).toString(CryptoJS.enc.Utf8); return result; } function encryptPwdHash (pwdHash, randomNumber) { var randomNumberMd5 = CryptoJS.MD5(randomNumber).toString().toUpperCase(); var key = CryptoJS.enc.Utf8.parse(randomNumberMd5); var result = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(pwdHash), key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }).ciphertext; return result; } Нужно переформатировать на php. Расшифровку смог сделать вот этой функцией function aes128_cbc_decrypt($key, $data, $iv) { $data = pack("H*", $data); $iv = pack("H*", $iv); $dec = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv); return $dec; } Входящие параметры --> `$key = strtoupper(md5($password));` хеш пароля `$data = '54BAA6158E81E1069EA2AB1C4F9D1F29';`- хеш рандомного числа `$iv = '00000000000000000000000000000000';` - вектор в виде 16 - ти ричной константы. Вот теперь нужно зашифровать обратно пароль с помощью рандомного числа и отправить написал функцию которая делает подобноеfunction aes128_cbc_encript($key, $data, $iv) { $key = pack("H*", strtoupper(md5($key))); //var_dump($data); //$data = pack("H*", $data); $iv = pack("H*", $iv); //$enc = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv); $enc = openssl_encrypt($data, 'AES-128-CBC', $key, true, $iv); return bin2hex($enc); } Пробую запускать $decript = '34345'; // расшифрованное рандомное число $pswdHash = strtoupper(md5($password)); $encript = aes128_cbc_encript($decript, $pswdHash, '00000000000000000000000000000000'); На выходе получаю нечто - `72fc1b49db86787b749c3323421496af00933eb79a9b7d845a51f5ea3fefdf750800554f5fdf0c7d3d765fe7f6653da3` Такой шифр и должен быть по длинне и в 16 - ти разрядном виде, но он не правильный и при отправке на сервер он не расшифровуется. Вот пример функции на Oracle которые на сервере делают расшифровку Fc_Decrypt_Password_Hash(In_Encrypted_Password_Hash In Varchar2, In_Random_Number_Md5 In Varchar2) Return Varchar2 Is Raw_Random_Number_Md5 Raw(2000); Raw_Result Raw(2000); Result Varchar2(2000); Begin Raw_Random_Number_Md5 := Utl_I18n.String_To_Raw(Upper(In_Random_Number_Md5), 'AL32UTF8'); Raw_Result := Dbms_Crypto.Decrypt(Typ => Dbms_Crypto.Aes_Cbc_Pkcs5, Src => Upper(In_Encrypted_Password_Hash), Key => Raw_Random_Number_Md5); Result := Utl_I18n.Raw_To_Char(Raw_Result, 'AL32UTF8'); Return(Result); End;
Этот код использует openssl_encrypt и openssl_decrypt для шифрования и расшифрования данных. Убедитесь, что на вашем сервере включено расшифрование с помощью OpenSSL.
Для шифрования данных на PHP можно использовать функции openssl_encrypt и openssl_decrypt с алгоритмом AES-128-CBC. Вот пример реализации:
function aes128_cbc_encrypt($key, $data, $iv) {$encrypted = openssl_encrypt($data, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);
return bin2hex($encrypted);
}
function aes128_cbc_decrypt($key, $encryptedData, $iv) {
$encryptedData = hex2bin($encryptedData);
$decrypted = openssl_decrypt($encryptedData, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);
return $decrypted;
}
$password = 'your_password';
$randomNumber = 'your_random_number';
$iv = '0000000000000000'; // 16-byte initialization vector (IV) as hexadecimal
$key = strtoupper(md5($randomNumber));
// Encrypt the password hash
$encryptedPasswordHash = aes128_cbc_encrypt($key, $password, $iv);
// Decrypt the encrypted password hash
$decryptedPasswordHash = aes128_cbc_decrypt($key, $encryptedPasswordHash, $iv);
echo "Encrypted Password Hash: " . $encryptedPasswordHash . "\n";
echo "Decrypted Password Hash: " . $decryptedPasswordHash . "\n";
Этот код использует openssl_encrypt и openssl_decrypt для шифрования и расшифрования данных. Убедитесь, что на вашем сервере включено расшифрование с помощью OpenSSL.