Sop*_*des 3 php encryption cryptography
我对当前尝试访问的API的加密有以下要求:
每次我使用加密提交API时,API似乎都有问题(遗憾的是没有产生错误).
$Data = "GOOD!";
$aesKey = "1234567812345678";
$EncryptedData = encrypt($aesKey,$Data);
$DecryptedData = decrypt($aesKey,$EncryptedData);
echo "Orignal Data : ". $Data;
echo "<br/>";
echo "After encryption = ". $EncryptedData;
echo "<br/>";
echo "After decryption = " .$DecryptedData;
function encrypt($aesKey, $dataToEncrypt) {
$output = false;
$iv = '{{{{{{{{{{{{{{{{';
$output = openssl_encrypt($dataToEncrypt, 'AES-128-CBC', $aesKey,
OPENSSL_RAW_DATA, $iv);
$output = base64_encode($output);
return $output;
}
function decrypt($aesKey, $dataTodecrypt) {
$output = false;
$iv = '{{{{{{{{{{{{{{{{';
$dataTodecrypt = base64_decode ($dataTodecrypt);
$dataTodecrypt = $output = openssl_decrypt($dataTodecrypt, 'AES-128-CBC',
$aesKey, OPENSSL_RAW_DATA, $iv);
return $output;
}
Run Code Online (Sandbox Code Playgroud)
问题:
AES 256很好,但块大小究竟是什么意思?
AES的固定块大小为128位.分组密码仅适用于特定大小的一个块.模式操作扩展了分组密码,能够处理多个块,并且填充使其能够在不是块大小的倍数的明文上工作.
AES-128-CBC表示密钥大小为128位的AES和CBC操作模式.如果您想使用AES-256,那么您需要告诉OpenSSL:AES-256-CBC.此外,您需要使用实际256位长的密钥.您当前的密钥只有128位长.
究竟什么是PKCS7填充方法并且可以用php实现?
openssl_encrypt()已经为你做PKCS#7填充并为你openssl_decrypt()删除它.
IV究竟做了什么?
随机IV使密文随机化,这意味着用相同的密钥加密相同的明文,但是不同的IV产生不同的密文,该密文与随机噪声或具有不同IV的相同加密无法区分.维基百科很好地描述了这实际上是做什么的.
请记住,每次迭代都必须随机生成IV.否则,只观察密文的攻击者可能会发现您多次加密相同的明文.
请记住,AES密钥应该是非常嘈杂的高熵."12345 ......"看起来更像是一个密码.如果要使用密码,则需要从该密码派生密钥.PBKDF2是随机盐和大量迭代的好主意.