Как реализовать шифрование данных на 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;

21 Авг 2019 в 07:13
368 +1
0
Ответы
1

Для шифрования данных на PHP можно использовать функции openssl_encrypt и openssl_decrypt с алгоритмом AES-128-CBC. Вот пример реализации:

function aes128_cbc_encrypt(key,key, key,data, $iv) {
$encrypted = openssl_encrypt(data,′AES−128−CBC′,data, 'AES-128-CBC', data,AES128CBC,key, OPENSSL_RAW_DATA, iv);returnbin2hex(iv);
return bin2hex(
iv);returnbin2hex(
encrypted);
}
function aes128_cbc_decrypt(key,key, key,encryptedData, $iv) {
$encryptedData = hex2bin(encryptedData);encryptedData);
encryptedData);
decrypted = openssl_decrypt(encryptedData,′AES−128−CBC′,encryptedData, 'AES-128-CBC', encryptedData,AES128CBC,key, OPENSSL_RAW_DATA, iv);returniv);
return
iv);return
decrypted;
}
password=′yourpassword′;password = 'your_password';
password=yourp assword;
randomNumber = 'your_random_number';
iv=′0000000000000000′;//16−byteinitializationvector(IV)ashexadecimaliv = '0000000000000000'; // 16-byte initialization vector (IV) as hexadecimal
iv=0000000000000000;//16byteinitializationvector(IV)ashexadecimal
key = strtoupper(md5(randomNumber));//EncryptthepasswordhashrandomNumber));
// Encrypt the password hash
randomNumber));//Encryptthepasswordhash
encryptedPasswordHash = aes128_cbc_encrypt(key,key, key,password, iv);//Decrypttheencryptedpasswordhashiv);
// Decrypt the encrypted password hash
iv);//Decrypttheencryptedpasswordhash
decryptedPasswordHash = aes128_cbc_decrypt(key,key, key,encryptedPasswordHash, iv);echo"EncryptedPasswordHash:".iv);
echo "Encrypted Password Hash: " .
iv);echo"EncryptedPasswordHash:".
encryptedPasswordHash . "\n";
echo "Decrypted Password Hash: " . $decryptedPasswordHash . "\n";

Этот код использует openssl_encrypt и openssl_decrypt для шифрования и расшифрования данных. Убедитесь, что на вашем сервере включено расшифрование с помощью OpenSSL.

20 Апр 2024 в 13:05
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир