首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python 实现RSA SHA-1签名

Python 实现RSA SHA-1签名

作者头像
py3study
发布2020-01-07 11:50:55
发布2020-01-07 11:50:55
2K0
举报
文章被收录于专栏:python3python3

今天对接业务接口,传递的参数需要用RSA签名,三方只给了java的RSA签名Demo;但我们这边后端采用python开发,因此需要用Python来实现RSA签名。

Java版Demo

代码语言:javascript
复制
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.spec.PKCS8EncodedKeySpec;

public class Sign {
    public static String sign(String content, String privateKey) {
        try {
            PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(Base64
                    .decode(privateKey));
            KeyFactory keyf = KeyFactory.getInstance("RSA");
            PrivateKey priKey = keyf.generatePrivate(priPKCS8);

            java.security.Signature signature = java.security.Signature
                    .getInstance("SHA1WithRSA");//签名算法SHA1WithRSA

            signature.initSign(priKey);
            signature.update(content.getBytes("UTF-8"));

            byte[] signed = signature.sign();

            return Base64.encode(signed);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }
}

Python相关RSA加密库: rsa, Crypto, M2Crypto;下面分别调研了使用rsa和Crypto实现RSA签名(代码中,pem就是RSA签名需要的私钥)。

利用rsa库

代码语言:javascript
复制
import base64
import rsa

def sign(self, data):
    pri_key = rsa.PrivateKey.load_pkcs1(self.pem)
    signature = rsa.sign(str(data), priv_key=pri_key, hash='SHA-1')
    return base64.b64encode(signature)

利用Crypto库

代码语言:javascript
复制
import base64
from Crypto.Signature import PKCS1_v1_5
from Crypto.PublicKey import RSA
from Crypto.Hash import SHA


def sign(self, data):
    private_key = RSA.importKey(self.pem)
    cipher = PKCS1_v1_5.new(private_key)
    h = SHA.new(data)
    signature = cipher.sign(h)
    return base64.b64encode(signature)

相关内容

openssl生成PKCS#1格式

代码语言:javascript
复制
openssl genrsa -out rsa_private_key.pem 1024
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

openssl生成PKCS#8格式

代码语言:javascript
复制
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt

python方式生成PKCS#1格式

代码语言:javascript
复制
import rsa

(pubkey, privkey) = rsa.newkeys(1024)
privkey.save_pkcs1('PEM')
pubkey.save_pkcs1('PEM')
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java版Demo
  • 利用rsa库
  • 利用Crypto库
  • 相关内容
    • openssl生成PKCS#1格式
    • openssl生成PKCS#8格式
    • python方式生成PKCS#1格式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档