我设法用PHP语言编写AES-CCM中的数据加密和解密代码。此代码检索数据,将其发送到服务器并通过post URL将其添加到数据库。但是,如果某人有权访问该URL并将其多次发送到服务器,则每次都会向数据库添加数据。 有没有一种简单的方法可以在添加数据后禁止此URL?
编辑:我想我会在加密部分添加日期和小时。然后当我收到数据时,我会用+ -1min检查日期和小时。并检查我是否还没有收到此消息。 你怎么看待这个解决方案?!这很容易破解吗?!
这是我的代码(Fisrt部分):
$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
);
$ciphertext = bin2hex($ciphertext);
$iv = bin2hex($iv);
$tag = bin2hex($tag);
echo'<a href="adddata1?data='.$ciphertext.'&tag='.$tag.'&iv='.$iv.'">"decrypte"</a>';
?>
第二部分:
$algo = 'aes-128-ccm';
$key = "cd9344040aa9f9217871d46ee871c59c";
$ciphertext = hex2bin($_GET['data']);
$iv = hex2bin($_GET['iv']);
$tag = hex2bin($_GET['tag']);
$decrypt = openssl_decrypt(
$ciphertext,
$algo,
$key,
OPENSSL_RAW_DATA,
$iv,
$tag
);
if (false === $decrypt) {
throw new Exception(sprintf(
"OpenSSL error: %s", openssl_error_string()
));
}