用Python实现MD5&RSA签名和验签

本文介绍了如何使用Python结合pem文件和json文件进行MD5及RSA的签名与验证操作,包括使用pub_key.pem和priv_key.pem文件进行签名和验签,以及通过key.json文件管理密钥。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用pem文件

pub_key.pem

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQChNn3wKRtPmxaKq2dKsfMn6sO6AKxvtxZgNdh7
HBWq2z0AJusZHFx2tO2X3jpaYWSIwDrH6AdU2LMMc7IRaUgvLRgT6kPK5OLEzvS+Bmh+1kh7Fz4z
k96UX7UDt55vyK18dJxad+tYwzcN4/Vjudy9RQy6nVX+tRtqRMVNKE254wIDAQAB
-----END PUBLIC KEY-----

priv_key.pem

-----BEGIN PRIVATE KEY-----

-----END PRIVATE KEY-----

签名&验签

以下是使用Python实现采用1024bit长度密钥的RSA签名方式,加密算法使用MD5WithRSA,计算签名的时候需要使用GBK编码的示例代码: ```python import hashlib from Crypto.PublicKey import RSA from Crypto.Signature import PKCS1_v1_5 from Crypto.Hash import MD5 import codecs # 加载私钥 private_key_str = '-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQDQz8t7jv2J2O3/6K4s5w2o+1rPnXy7Yd9b5T5psT1y9t2JQeN7 u8o7FpKk3M0W1LrPa0GZDf9kDzU7JEr4yvIL1FZBnYK6sCp+P7Wt2dG0yq8a8m7Z LYvN1Jj+H4+M2vBNQGJ6uVQh8yKZ6Q/2m+EEJnJp4DjH/0CmK2yFjz7SjQIDAQAB AoGBAIr2+UJ8t3iDjugg6d9wq9TjZa+qvg0tIuQvJrP6oXh0DyMIQ1ASlRkYnVpY iM4xi3/2tE5L0GnNSB2f5cP3N6LnoBBWb/0DLwE9k6E3Uz5YyZkzCSfO5I/6xUy/ xU+OJ2vJWZi+T+M4b6Vz1NpGUK2QtDSZq9Cvpyj/xpJ8x8CBAkEA/9aMx9xjYBqC 2sP6jwJf0C4kIvzOJcV9uXjOyUejg3a/5RG8F+5j69yOIGs2aWxRrC8lH7fRrKJL uR3R4KwKZQJBAMj8/5IN5kL4yJz6vR0z6a5Dy8kQzZrR3HJlW2cVxQg5uH3a8zrj fGf3B+4e1Dn6a8Nq1F9zKztf+Ll5S3j8bZ8CQQCQr4QlJpX4QqoX4W0sNYI1jg3 N5X3N9tNjsCJeQzlRQlFQv4Vu4f+/+wWzD+q2hIbJUJU0lC5gq9v6XNDL5zBAkEA t4semjy6bX1v8YRyQkLzXZtGnOeB6r5Z+DQzK6QVfzJnC7Y8H+txbVh1OT1Mjg0i E6sX7r2gkxjm3PjZ1x6v7QJBAJ4dWzrNfKXJY3z8xw6Xq8z3qW8QXhQaP7Iz3x7P nLhW8S2tQqzSfQlZbDj/Tz5dN0V4VjWlT7nYw2mSjKZT7jI= -----END RSA PRIVATE KEY-----' private_key = RSA.importKey(private_key_str) # 加载公钥 public_key_str = '-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQz8t7jv2J2O3/6K4s5w2o+1rP nXy7Yd9b5T5psT1y9t2JQeN7u8o7FpKk3M0W1LrPa0GZDf9kDzU7JEr4yvIL1FZB nYK6sCp+P7Wt2dG0yq8a8m7ZLYvN1Jj+H4+M2vBNQGJ6uVQh8yKZ6Q/2m+EEJnJp 4DjH/0CmK2yFjz7SjQIDAQAB -----END PUBLIC KEY-----' public_key = RSA.importKey(public_key_str) # 待签名的数据 data = "待签名的数据".encode('gbk') # 计算MD5哈希值 md5_hash = hashlib.md5(data).digest() # 用私钥对MD5哈希值进行数字签名 signer = PKCS1_v1_5.new(private_key) signature = signer.sign(MD5.new(md5_hash)) # 证数字签名 verifier = PKCS1_v1_5.new(public_key) if verifier.verify(MD5.new(md5_hash), signature): print("数字签名证通过") else: print("数字签名证失败") ``` 需要注意的是,在进行数字签名的时候,需要使用相同的编码方式,这里使用的是GBK编码。同时,签名的过程中,都需要对待签名的数据先进行MD5哈希计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值