我需要加密16个十六进制字符并以密文获得16个十六进制字符, 我已经尝试使用openssl加密16个十六进制字符后,该怎么做(添加或更改)以在密文中获取16个十六进制字符。
<?php
$key = 'qwetyasdftrewqasdcxz';
function my_encrypt($data, $key) {
$encryption_key = base64_decode($key);
$iv = '11111111';
$encrypted = openssl_encrypt($data, 'des', $encryption_key, 0, $iv);
return base64_encode($encrypted );
}
function my_decrypt($data, $key) {
$encryption_key = base64_decode($key);
$iv = '11111111';
$encrypted_data=base64_decode($data);
return openssl_decrypt($encrypted_data, 'des', $encryption_key, 0, $iv);
}
$password_plain = 0x34adeb98761a2b;
echo $password_plain . "<br>";
$password_encrypted = my_encrypt($password_plain, $key);
echo $password_encrypted . "<br>";
$password_decrypted = my_decrypt($password_encrypted, $key);
echo $password_decrypted . "<br>";
答案 0 :(得分:0)
我需要加密16个十六进制字符并以密文形式获取16个十六进制字符,
就像一个XY Problem的示例。
为什么输入和输出都需要16个十六进制字符?就目前而言,您的操作要求已经注定了。
在我看来您正在存储密码。加密通常是工作的错误工具。改为查看password hashing。
但是,如果您确实需要加密字符串,并且希望加密是安全的,则必须接受您的输出将长于输入。
原因是,加密本身就是vulnerable to chosen-ciphertext attacks。您需要某种方式来确保加密邮件的完整性,以防止攻击破坏邮件的机密。
最好的办法是询问您的要求。 “为什么我需要输入为16个十六进制字符?为什么我需要输出为16个十六进制字符?”
此外,请勿使用DES或Triple-DES。