python 使用rsa生成公私钥并使用公钥加密 私钥解密

没有公私钥时,通过代码生成公私钥并加解密:

import rsa

# 生成公私钥对
(pubkey, privkey) = rsa.newkeys(2048)

# 保存公钥到文件
with open('public_key.pem', 'w') as f:
    f.write(pubkey.save_pkcs1().decode())

# 保存私钥到文件
with open('private_key.pem', 'w') as f:
    f.write(privkey.save_pkcs1().decode())

# 要加密的字符串
plaintext = b'Hello, World!'

# 使用公钥加密字符串
ciphertext = rsa.encrypt(plaintext, pubkey)

# 使用私钥解密字符串
decrypted_text = rsa.decrypt(ciphertext, privkey)

# 打印加密后的字符串和解密后的字符串
print("加密后的字符串:", ciphertext)
print("解密后的字符串:", decrypted_text)

把上述生成在文件里的公私钥,写死在代码里时:

import rsa

plaintext = b"Hello, World!"

pub = b'-----BEGIN RSA PUBLIC KEY-----\nMIIBCgKCAQEAmTjYs587m2Q0Lq90chvIWCB1cC/93qZ83XQBwqKZWg8aufEel6yo\nGNmhP1qNfGtj5GggmTZFB168E1gfmZ3Lnw5lZs5yBUjyfdSAocj+zdgIr1UXiiYi\nHtjF7uT5Qd7KqpnrbLk+3+nFWS9bF/tVpmXz1m5rSJob4ev0KZelMKq39Yov5Dap\nGTTBM17djoSCOWb9OJ652zIURaVcyI2hax93XLmrtix7d2SIpRNV1mCVwS8GVUBM\nVDbA/+OiIKyK4qcwMxpRrEcjgvUXJKT7sPWx29ycVY4Ykq1OaxpwYq4MymutdeIv\nype2O3gd5yu46ZoGrRnKJFut0BmyF0MIBwIDAQAB\n-----END RSA PUBLIC KEY-----\n'

pri = b'-----BEGIN RSA PRIVATE KEY-----\nMIIEqAIBAAKCAQEAmTjYs587m2Q0Lq90chvIWCB1cC/93qZ83XQBwqKZWg8aufEe\nl6yoGNmhP1qNfGtj5GggmTZFB168E1gfmZ3Lnw5lZs5yBUjyfdSAocj+zdgIr1UX\niiYiHtjF7uT5Qd7KqpnrbLk+3+nFWS9bF/tVpmXz1m5rSJob4ev0KZelMKq39Yov\n5DapGTTBM17djoSCOWb9OJ652zIURaVcyI2hax93XLmrtix7d2SIpRNV1mCVwS8G\nVUBMVDbA/+OiIKyK4qcwMxpRrEcjgvUXJKT7sPWx29ycVY4Ykq1OaxpwYq4Mymut\ndeIvype2O3gd5yu46ZoGrRnKJFut0BmyF0MIBwIDAQABAoIBADRZ7/CvXzZgrlOl\nLywtwe4aaQXD4AHK8K7ZjCBsXekfcApIECPSojybXzS+Q8lXB/JqgXjXyg4SmEAj\nw+hAuenGiW7u6pZTrka/7JNakXTTc2Q0tq5FCTNw7XAKW//dl3Fi1cV4JbtrrDok\nrAMtpL4N55pEb/OGc/Jdb/obKTTd4fPKX6EP89g+FEMgFoEdsucWPkUntCnUmU1K\nfP33/ZaFwxtwqUFUUNUExDhpSxNyBPMP2c/R0pEm205Dr27fJgUM8gr94ia2ghdG\n+6gZSBU3oj5jcizhhq8FsM0rKL6pGTsF2sVnT2WmiDN7ZaiD1vwanuVKs7hH22wk\nhR8G80ECgYkAtYwTWyDkBg5swkWkvVjnAx7/5ofY98R7O/ZTdtTovLL+VxyLg/69\nkrkeMGNMwldVnuPD11G7LlxNYO10WFWmDYde+IQc+6Chw5/oHe1kj1l0NSv6DFGd\nwrpL85mMrg3zCfqMoJVavK6ekJ1eEw8FHFSZK0uB58LJvqRgHljSM/JCNXTMJlsJ\nowJ5ANgPB0eWjBexU9ucjDcZFOJgc3nKrWhAsgoLma6Ty1fSPCG58725DwkIwJn1\nIr1wvL7J9jCgdl8tB2XFeg7ePmVOkCyXBfoZQqdrgk8gqY/WUoDSOK90eRG5XB1E\nMMWTWNxtV9a217LXNKLYCgZ3rSWa723qYdB2TQKBiCNhXRRRYJ7diMyDjgtom/y7\nudtPdjUzEWEqLDHoZEMCDxci9P2QU5mYgg2kDH2DT6hbcvsvbm8mhd3x6M6eQnI4\ng4WjGZLgRyY8r5vFe+eD42XJYD2uWjRs4ghjUEtLZKX5MhbJhJlo3nYIdSD5uGFB\nC2iomnR0PaTtm93OKYj+GXEZhf+jlkkCeDkJdp2Cc8dJa97c6/MbrvS4C6QKSk7s\nTVPzjgWVRKgRewhYQ61BLmPvKJE8MoiaO2mOfWyG39juVTabtEY6i3RJEiyDTfOh\nOYRjEEp9T+YF6U/Sr146PD/elB+xwcJWzK2cPAUVzcmLoHyg1byxWUdFKJH2vw2+\nPQKBiAUePeVGj6Aj53e9mngbMa2pqPImd+YGeiLNMieHzkZgimoFD0QbW4ctXRMm\n4j4CobJn9TSvNcbPKFqQHqYDZ8fqR39GkUiYtsHQSjE6Iau1hBGBnP3ZgMkSEEvC\n0OZCFf78SvkVCkMOJjAsHEKaFutyL0xkGZXyM/VVXos+4RHpnqD2/z5zWg4=\n-----END RSA PRIVATE KEY-----\n'

pubkey = rsa.PublicKey.load_pkcs1(pub)

privkey = rsa.PrivateKey.load_pkcs1(pri)

# 使用公钥加密数据

ciphertext = rsa.encrypt(plaintext, pubkey)

print("原始数2222据:", plaintext)

print("加密后的数据:", ciphertext)

# 使用私钥解密数据

decrypted_message = rsa.decrypt(ciphertext, privkey)

print("解密后的数据:", decrypted_message.decode())

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要使用 OpenSSL 工具生成一个证书文件,包括公钥私钥: ``` openssl req -x509 -newkey rsa:2048 -keyout example.key -out example.crt -days 365 ``` 这个命令将生成一个 2048 位 RSA 密钥对,并将其用于创建自签名的 X.509 证书,有效期为一年。生成私钥将保存在 `example.key` 文件中,证书将保存在 `example.crt` 文件中。 接下来,我们可以使用 OpenSSL 的命令行工具来提取证书文件中的公钥: ``` openssl x509 -in example.crt -pubkey -noout > example.pub ``` 这个命令将从 `example.crt` 中提取公钥,并将其保存到 `example.pub` 文件中。 现在,我们可以使用 Python 的 Cryptography 模块来加密数据。以下是一个示例脚本: ```python from cryptography.hazmat.primitives.asymmetric import rsa, padding from cryptography.hazmat.primitives import serialization # 读取公钥 with open('example.pub', 'rb') as f: pubkey_bytes = f.read() pubkey = serialization.load_pem_public_key(pubkey_bytes) # 加密数据 message = b'Hello, world!' ciphertext = pubkey.encrypt(message, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None)) # 打印密文 print(ciphertext) ``` 这个脚本从 `example.pub` 中读取公钥,并使用 OAEP 填充方案加密了一条消息。密文将打印到控制台上。 最后,我们可以使用 OpenSSL 的命令行工具来解密数据: ``` openssl rsautl -decrypt -inkey example.key -in ciphertext.bin ``` 这个命令将使用 `example.key` 中的私钥解密 `ciphertext.bin` 文件中的数据。请注意,`ciphertext.bin` 文件中的数据必须是二进制格式的密文,而不是 Base64 编码的字符串。 如果解密成功,您应该会看到原始的明文消息,即 `Hello, world!`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值