use*_*510 4 php encryption cryptography
我想用AES CCM加密和解密一些数据!
我设法在同一个php文件中执行此操作.但我希望能够将加密数据发送到另一个页面进行解密.但不可能......但我发送了iv,标签和加密数据.你有解决方案吗?
我有这些错误:
警告:openssl_decrypt():在第18行的adddata1.php中为AEAD密码解密设置标记失败
致命错误:未捕获异常:OpenSSL错误:错误:0607A082:数字信封例程:EVP_CIPHER_CTX_set_key_length:adddata1.php中的密钥长度无效:21堆栈跟踪:第21行dddata1.php中引发的#0 {main}
第一档:
$algo = 'aes-128-ccm';
$iv = random_bytes(openssl_cipher_iv_length($algo));
$key = "cd9344040aa9f9217871d46ee871c59c";
$data = '00000000010-3b57af';
$ciphertext = openssl_encrypt(
$data,
$algo,
$key,
OPENSSL_RAW_DATA,
$iv,
$tag
);
echo'<a href="adddata1?data='.$ciphertext.'&tag='.$tag.'&iv='.$iv.'">"decrypte"</a>';
?>
Run Code Online (Sandbox Code Playgroud)
第二档:
$algo = 'aes-128-ccm';
$key = "cd9344040aa9f9217871d46ee871c59c";
$ciphertext = $_GET['data'];
$iv = $_GET['iv'];
$tag = $_GET['tag'];
// Change 1 bit in additional authenticated data
// $i = rand(0, mb_strlen($aad, '8bit') - 1);
// $aad[$i] = $aad[$i] ^ chr(1);
$decrypt = openssl_decrypt(
$ciphertext,
$algo,
$key,
OPENSSL_RAW_DATA,
$iv,
$tag
);
if (false === $decrypt) {
throw new Exception(sprintf(
"OpenSSL error: %s", openssl_error_string()
));
}
printf ("Decryption %s\n", $data === $decrypt ? 'Ok' : 'Failed');
printf("<br/>");
printf(base64_encode($tag));
printf("<br/>");
printf(base64_encode($iv));
printf("<br/>");
printf(base64_encode($ciphertext));
printf("<br/>");
printf($data);
?>
Run Code Online (Sandbox Code Playgroud)
在一个文件中:
<?php
$algo = 'aes-128-ccm';
$iv = random_bytes(openssl_cipher_iv_length($algo));
$key = "cd9344040aa9f9217871d46ee871c59c";
$data = '00000000010-3b57af';
$ciphertext = openssl_encrypt(
$data,
$algo,
$key,
OPENSSL_RAW_DATA,
$iv,
$tag
);
// Change 1 bit in additional authenticated data
// $i = rand(0, mb_strlen($aad, '8bit') - 1);
// $aad[$i] = $aad[$i] ^ chr(1);
$decrypt = openssl_decrypt(
$ciphertext,
$algo,
$key,
OPENSSL_RAW_DATA,
$iv,
$tag
);
if (false === $decrypt) {
throw new Exception(sprintf(
"OpenSSL error: %s", openssl_error_string()
));
}
printf ("Decryption %s\n", $data === $decrypt ? 'Ok' : 'Failed');
printf("<br/>");
printf(base64_encode($tag));
printf("<br/>");
printf(base64_encode($iv));
printf("<br/>");
printf(base64_encode($ciphertext));
printf("<br/>");
printf($data);
?>
Run Code Online (Sandbox Code Playgroud)
谢谢
问题可能是iv.您正在生成随机字节并将其作为请求参数添加到URL中,其中字符串编码很重要.将字节转换为URL中有效的字符. bin2hex是一个简单的方法:
echo '<a href="adddata1?data='.$ciphertext.'&iv='.bin2hex($iv)...
Run Code Online (Sandbox Code Playgroud)
并在接收端将其转换回来:
$iv = hex2bin($_GET['iv']);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1319 次 |
| 最近记录: |