sergey-bel / nicecrypto
此包的最新版本(v2.0.0)没有提供许可证信息。
优秀加密包
v2.0.0
2019-05-09 12:31 UTC
Requires
- ext-openssl: *
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-09 23:50:17 UTC
README
NiceCrypto 是一个基于 openssl 扩展的简单而强大的 PHP 加密库
安装
composer require sergey-bel/nicecrypto
密钥
使用 PrivateKey 和 PublicKey 类来处理密钥对;
$yourPrivateKey = '-----BEGIN ENCRYPTED PRIVATE KEY...'; $passphrase = 'your secret password'; $privateKey = new PrivateKey($yourPrivateKey, $passphrase);
$yourPublicKey = '-----BEGIN PUBLIC KEY...'; $publicKey = new PublicKey($yourPublicKey);
要生成 pem 密钥,请使用 PemGenerator
// generate private and public keys and save in files $generator = new PemGenerator(); $privateKey = $generator->generatePrivateKey(); $publicKey = $generator->generatePublicKey($privateKey); file_put_contents('private.pem', $privateKey->toString()); file_put_contents('public.pem', $publicKey->toString());
如果需要使用选项(密码短语、位长度等),请使用 GenerateOptions 类
// generate key pair 2048 bit length and encrypted with passphrase $bitsLength = 2048; $passphrase = 'password'; $options = new GenerateOptions(); $options->setBits($bitsLength)->setPassphrase($passphrase); $generator = new PemGenerator(); $privateKey = $generator->generatePrivateKey($options); $publicKey = $generator->generatePublicKey($privateKey);
加密算法
Cipher 类用于对称加密/解密(例如 AES)
$key = 'ffffffffffffffffffffffffffffffff'; $iv = 'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee'; $m = 'some string'; $c = '596864655a4f71315a357164353045734566676d35513d3d'; $cipher = new Cipher(CipherAlgotithms::AES256, CipherModes::CBC); $c = $cipher->encrypt($m, $key, $iv); $message = $cipher->decrypt($c, $key, $iv); // 'some string'
您可以使用 RandomGenerator 生成密钥和 iv
$generator = new RandomGenerator(); $cipher = new Cipher(CipherAlgotithms::AES256, CipherModes::CBC); $key = $generator->generateRandomBytes(32); //256 bits key $iv = $generator->generateRandomBytes($cipher->getIvBytesLength()); // encrypt\decrypt using key and iv
散列
Hash 类用于计算加密散列函数
$hash = new Hash(HashAlgorithms::SHA256); $text = 'The quick brown fox jumps over the lazy dog'; $h = $h->hash($text); //'d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592'
签名
Signature 用于签名和验证加密签名
$privateKey = new PrivateKey('your private key'); $s = new Signature(new Hash(HashAlgorithms::SHA256)); $signature = $s->sign($data, $privateKey); $publicKey = new PublicKey('your public key'); $result = $signature->verify($data, $signature, $publicKey); //true
CSR 和 X509 证书
创建 CSR 证书
$dn = new CsrInfo(); $dn->setCountryName("GB") ->setStateOrProvinceName("Somerset") ->setLocalityName("Glastonbury") ->setOrganizationName("The Brain Room Limited") ->setOrganizationalUnitName("PHP Documentation Team") ->setCommonName("Wez Furlong") ->setEmailAddress("wez@example.com"); $privateKey = (new PemGenerator())->generatePrivateKey(); $gen = new CsrGenerator(); $csr = $gen->generateCsr($dn, $privateKey); file_put_contents('req.csr', $csr->getAsString());
从 CSR 证书创建 x509 证书
$dn = new CsrInfo(); $dn->setCountryName('GB') ->setStateOrProvinceName('Somerset') ->setLocalityName('Glastonbury') ->setOrganizationName('The Brain Room Limited') ->setOrganizationalUnitName('PHP Documentation Team') ->setCommonName('Wez Furlong') ->setEmailAddress('wez@example.com'); $privateKey = (new PemGenerator())->generatePrivateKey(); file_put_contents('priv.pem', $privateKey->getAsString()); $gen = new CsrGenerator(); $csr = $gen->generateCsr($dn, $privateKey); file_put_contents('req.csr', $csr->getAsString()); $x509Generator = new X509Generator(); $x509 = $x509Generator->generateX509($csr, $privateKey); file_put_contents('x509.cert', $x509->getAsString());