Php 如何在数据库中存储私钥?

Php 如何在数据库中存储私钥?,php,security,openssl,private-key,Php,Security,Openssl,Private Key,我对证书和钥匙没有什么经验。我必须在数据库中存储第三方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')); $

我对证书和钥匙没有什么经验。我必须在数据库中存储第三方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也可以工作

我做错了什么

在$encrypted上使用base64_encode可以防止数据库编码导致的数据丢失

然而,还有很多其他的错误会影响你的方案的安全性,而不仅仅是阻止它运行


有关如何安全实施加密的全面指南,请参阅。

if$encrypted包含:?if将对字符串使用mcrypt_encrypt和mcrypt_decrypt。请查看PHP站点:和@SLaks中的文档。我不确定openssl_encrypt是否提供了类似“:”的字符@user1429322:Ciphertext可以并将包含任意字节。@SLaks同意。但问题不在于此。调试时,我没有看到任何“:”。所以“:”可能会成为一个问题,但这不是我的问题。