RSA加密解密

在线demo

引用库

use zxf\Encryption\RSA;

生成密钥对

generateKeyPair 的第二个参数选择是否保存到文件
// 生成密钥对并保存到文件(可选)
$privateKeyFile = './private_key.pem'; // 私钥文件路径(请确保路径安全)
$publicKeyFile  = './public_key.pem'; // 公钥文件路径(通常可以公开)
$saveKeysToFile = true; //是否将密钥保存到文件,默认为false
$digestAlg='sha512'; // 摘要算法或签名哈希算法 sha512 、sha1、md5、sha384、sha256 等 支持的算法见 openssl_get_md_methods()
if (!RSA::generateKeyPair(2048, $saveKeysToFile, $privateKeyFile, $publicKeyFile,$digestAlg)) {
	throw new Exception('Failed to generate key pair or save keys to file.');
}

使用公钥加密数据

$publicKeyFile  = './public_key.pem'; // 公钥文件路径或者内容字符串(通常可以公开)

// 使用公钥加密数据
$plaintext = 'Hello, RSA!'; // 待加密的数据
$outputFormat='base64'  ;// 输出格式('base64'或'hex')
$padding=OPENSSL_PKCS1_PADDING      ;// 填充参数,默认为OPENSSL_PKCS1_PADDING
$encrypted = Rsa::encryptWithPublicKey($plaintext,$outputFormat,$publicKeyFile,$padding);
if ($encrypted === null) {
    throw new Exception('Encryption failed.');
}
echo 'Encrypted: ' . $encrypted . PHP_EOL; // 输出加密后的数据(Base64编码)

使用私钥解密数据

$privateKeyFile = './private_key.pem'; // 私钥文件路径或字符串内容(请确保路径安全)
$inputFormat='base64'  ;// 输出格式('base64'或'hex')
$padding=OPENSSL_PKCS1_PADDING      ;// 填充参数,默认为OPENSSL_PKCS1_PADDING

// 使用私钥解密数据(通常在另一个安全的环境中执行)
$decrypted = Rsa::decryptWithPrivateKey($encrypted,$inputFormat,$privateKeyFile,$padding); // 注意:解密操作应该在可以安全访问私钥的环境中进行
if ($decrypted === null) {
    throw new Exception('Decryption failed.');
}
echo 'Decrypted: ' . $decrypted . PHP_EOL; // 输出解密后的数据,应该与原始数据相同('Hello, RSA!')