我对证书和密钥没有经验。我必须在我的数据库中存储第三方API的私钥。我有一把密钥来加密它。这就是我在PHP中所做的
$private_key = "----BEGIN PRIVATE KEY---\nABCDBLAH\n---END PRIVATE KEY----\n"
// The encryption and storing part - 1
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
$encrypted = openssl_encrypt($data, 'aes-256-cbc', 'mykey', 0, $iv);
$encrypted_data = $encrypted .':'base64_encode($iv);
//store in the database
//retrieve later
$parts = explode(':',$encrypted_data);
$private_key= openssl_decrypt($parts[0], 'aes-256-cbc', 'mykey', 0, base64_decode($parts[1]));
// 2
Use in the API.
如果我忽略1和2之间的部分来存储和从数据库中检索密钥,那么API和一切都正常,这意味着存储和检索密钥有问题。我在这里做错了什么?如果这不是正确的方法,我应该采用什么方式?请帮帮我。
注意:/ n部分在私钥中。如果我不加密,/ n无关紧要,API工作正常。
答案 0 :(得分:0)
我在这里做错了什么?
在base64_encode()
上使用$encrypted
可以防止数据库编码导致数据丢失。
但是,您做错的其他事情中有很多会影响方案的安全性,而不仅仅是阻止其运行。
请查看this answer,以获取有关如何安全实施加密的全面指南。