PHP Openssl 生成公钥私钥 RSA公约私钥加密解密示例

<?php
//配置信息
$dn = array(
    "countryName" => "GB",
    "stateOrProvinceName" => "SomeWhoami",
    "localityName" => "Whoami",
    "organizationName" => "The Room Whoami",
    "organizationalUnitName" => "PHP Documentation Team",
    "commonName" => "Whoami",
    "emailAddress" => "Whoami@example.com"
);

$config = array(
    "private_key_bits" => 512, //指定应该使用多少位来生成私钥  512 1024  2048  4096等
    "private_key_type" => OPENSSL_KEYTYPE_RSA, //选择在创建CSR时应该使用哪些扩展。可选值有 OPENSSL_KEYTYPE_DSA, OPENSSL_KEYTYPE_DH, OPENSSL_KEYTYPE_RSA 或 OPENSSL_KEYTYPE_EC. 默认值是 OPENSSL_KEYTYPE_RSA.
);
 //    生成证书
 $privkey = openssl_pkey_new($config);
 $csr = openssl_csr_new($dn, $privkey);
 $sscert = openssl_csr_sign($csr, null, $privkey, $numberofdays);
 //    导出证书$csrkey
 openssl_x509_export($sscert, $csrkey);
 //    导出密钥$privatekey
 openssl_pkcs12_export($sscert, $privatekey, $privkey, $privkeypass);
 //    获取私钥
 openssl_pkcs12_read($privatekey, $certs, $privkeypass);
 if (empty($certs['pkey'])) {
          $arr = array();
    }
 $prikeyid = $certs['pkey'];
 //    获取公钥
  $pub_key = openssl_pkey_get_public($csrkey);
  $keyData = openssl_pkey_get_details($pub_key);
  if (empty($keyData['key'])) {
         $arr = array();
    }
  $public = $keyData['key'];
  $arr =  array('publicKey'=>$public,'privateKey'=>$prikeyid);
  print_r($arr);
?>
在Python中,你可以使用OpenSSL库来处理RSA加密和解密。首先,你需要安装`pyOpenSSL`库,可以使用pip进行安装: ```bash pip install pyopenssl ``` 以下是生成公钥私钥、加密和解密的基本步骤: 1. **导入必要的模块**: ```python from OpenSSL import crypto ``` 2. **生成RSA密钥对**: ```python key = crypto.PKey() key.generate_key(crypto.TYPE_RSA, 2048) # 生成2048位的密钥 private_key = crypto.dump_privatekey(crypto.FILETYPE_PEM, key) public_key = crypto.dump_publickey(crypto.FILETYPE_PEM, key) ``` 3. **保存公钥私钥**: - 私钥通常需要安全地存储,不应该明文发布。 - 公钥可以公开分享用于接收者的验证。 4. **加载公钥私钥**(如果需要): ```python def load_keys(private_key_path, public_key_path): with open(private_key_path, "rb") as f: private_key = crypto.load_privatekey(crypto.FILETYPE_PEM, f.read()) with open(public_key_path, "rb") as f: public_key = crypto.load_publickey(crypto.FILETYPE_PEM, f.read()) return private_key, public_key # 使用时传入文件路径替换这里的路径 private_key, public_key = load_keys("path_to_your_private.pem", "path_to_your_public.pem") ``` 5. **加密示例**: ```python def encrypt(message, public_key): encrypted = public_key.encrypt(message.encode(), 32) # RSA OAEP padding return encrypted # 解密示例 def decrypt(encrypted_message, private_key): decrypted = private_key.decrypt(encrypted_message) return decrypted.decode() ``` 6. **调用上述函数并传递数据**: ```python message = "Hello, world!" encrypted = encrypt(message, public_key) decrypted = decrypt(encrypted, private_key) print(f"原始消息: {message}") print(f"加密后: {encrypted.hex()}") print(f"解密后: {decrypted}") ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值