dataground / payloadcypher
使用PHP OpenSSL RSA实现的字符串/数组/对象/JSON非对称加密库
1.0.9
2018-01-31 10:57 UTC
Requires
- neitanod/forceutf8: 1.4.*
Requires (Dev)
- phpunit/phpunit: 4.7.*
README
使用PHP OpenSSL RSA实现的字符串/数组/对象/JSON非对称加密库。通过使用负载分块算法支持无限长度的负载(仅受内存限制)。非常适合在数据库中安全存储负载。通过在负载输出前缀中支持多个密钥(密钥轮换)。
为什么使用RSA?
RSA并不是为负载加密而设计的。处理速度较慢,输出数据量较大,与AES相比。尽管如此,在某些情况下,RSA的非对称性质可能更受欢迎。主要优点是能够完全分离加密和解密。如果您只需要在一个应用程序/服务器中加密内容,则不需要将私钥分发到此环境。
合适的密钥长度是多少?
请参考出色的密钥长度工具http://www.keylength.com/。
依赖项
- php 5.4.x+
- php_openssl
密钥创建
创建RSA密钥
创建私钥
openssl genrsa -out MY001.pem 3072
创建公钥
openssl rsa -in MY001.pem -outform PEM -pubout -out MY001.pub.pem
用法
$payloadCypher = new PayloadCypher();
// This public key will be loaded on encryption
$payloadCypher->setOnPublicKeyLoad(
function () {
return array('MY001' => file_get_contents('MY001.pub.pem'));
}
);
// The private key will be loaded based on the encryption prefix
// When there is no need to decrypt this callback can be omitted
$payloadCypher->setOnPrivateKeyLoad(
function ($keyName) {
return array($keyName => file_get_contents($keyName.'.pem'));
}
);
// Encryption / Decryption of a string
$encrypted = $payloadCypher->encryptString('foo bar baz');
$decrypted = $payloadCypher->decryptString($encrypted);
echo $decrypted.PHP_EOL;
// ... foo bar baz
// Encryption / Decryption of an array stored as encrypted JSON
$encrypted = $payloadCypher->arrayToEncryptedJson(array('foo' => 'bar'));
$decrypted = $payloadCypher->encryptedJsonToArray($encrypted);
var_dump($decrypted);
// ... array('foo' => 'bar')