dataground/payloadcypher

使用PHP OpenSSL RSA实现的字符串/数组/对象/JSON非对称加密库

1.0.9 2018-01-31 10:57 UTC

This package is auto-updated.

Last update: 2024-09-22 20:07:21 UTC


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')