iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python RSA签名
  • 413
分享到

python RSA签名

pythonRSA 2023-01-31 06:01:20 413人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

这周一个项目客户提供了一份对接文档要求用RSA数字签名,客户提供的是java的demo,但是自己不想用java来做,想用python来实现,就自己研究了下Python下RSA签名。 先是研究了java-demo的流程和逻辑(因为是公司项

这周一个项目客户提供了一份对接文档要求用RSA数字签名,客户提供的是java的demo,但是自己不想用java来做,想用python来实现,就自己研究了下Python下RSA签名。


先是研究了java-demo的流程和逻辑(因为是公司项目客户提供的,不便对外公开),基本的流程是这样的:

1)先根据私钥KEY字符串,获取私钥对象(PrivateKey)

私钥KEY----------就是一个长字符串

比如下面这个是我自己用openssl生成的(MIIEpQIBAAKCAQEA9JPHRFaWOhi7PXZz/Kmun/ldJrd+YQy6diU2eFijVooL8NDG
4dsOojUpT9FhAUedXcDZrYN3BstFcaGRJQouyXZsbJjyFL8WNLLGFIwdcv1pTGve
cLOEdU1Rl+E4wCznYflxcUN3ngZQo7cN/la2poM1k/epR8UsWiH8wQj+v7FHMrt4
XMhVSVAqslfhs6yqJQuQwu3YiaspZVySAywaFFveLCcedKPrlZYoN9Q1Qg7hyXZ+
hqIPIyXBHFU721GqlDJ8K6lCXxjNK7xFWwo1QzLAwdfLA0ZJ1K00+4nv9E1JUcbX
emhDJHvyZ9O/ExRqdykkE6CAJD3tZkjhQwERnwIDAQABAoIBABQVxrl/+tpOiaHk
hmXrcWHF0raJPyGtL+rf53c+oDtNHunp20tU+ACuKPRbF4JJZUz7t2SedTnjm5JX
WFoYWftFdGX+sXKutp4hSE8Lqqd01B7ohN3wGCI59UdpwYVWqrHLEFvi1IHvttOb
BtUqPdmy0MWUAxzXvMQwe9dGa9VGCp55HezZo0nDkwg8s7h/CKndxmGCvFX/O5iV
RaJgUOkQ9iRp8v1M3ri/XBvt1BmAUzFvXs3RNmF3/fKsvOCINFIGnZt+zyW7s7XA
RBGoluorDLdMusvxy9qrGspc3U8L6Uf7xsHKwvaAVD/RLP03FopNkg8HPphikbQA
naoWzKECgYEA/giQ3qSJfNH/0TELayYVzEq3MYOEc/tiI1YrUUXLTJ7rQ3yZSjt7
HMIgjPzO6Ek4iVdVX0QnNNvD9To40blr5KykeioAOyta7hEAvZS4uMue1YXkW8i2
YpQJ9BzNho0SpHyB13/7TT9l9kyNSqemOVrDfvo24d4S7YafhBiNXOkCgYEA9nh4
+GCmV6+XR7lwbMrp3JLE/xpyiGK8P27COT22pT9Q3in8BSgjMa+vmJnGase6oQr6
xcd5Odqg5YmCs+T2MLoJg0sSBfCJxASRZPDnpz2MjTordm09PkauOCSSoq1IhH5E
xkDw97zIm1m1h87W8Zd+E500E687vRBanEzFxUcCgYEAwdwNmiqcVWn4vE6eNSW6
Ss3V4W5JPS1g5jCTHBGUJKO+TCEg5hpgSEEJEC65Q2DlSUIhf3MGLHttno3Q4JOM
99ScKvS9WmoqmTTWiNae5T9WtgHYlAam0LHCqsz0NzMfP/FYMPmU8I1qJTykMo2f
93MBb7xI97M+ZI9w2iDWeEkCgYEAu5G1ZjiPfv3XYDNE1taZoU5k80taTGbvokqV
LuDDZgDIdzp2XCpOllqAhN7KPKshYbusWuXSYO/8MJM0z9j4bt61rKBt5+1FutJL
IAmiEglqNHRHbUn3KLS7k2h9pRPAs2wwxLvZZn/aHzfnSaJku9kxjpW9cxmRmfGf
M4HNpLMCgYEAppL5J9jja2DrkRXoS9d4MvwaTlF/HsY2QRVRmlcvZddKXECcJ/fI
wmP7V/NNegLBsMukdrPez28bK1ci0iigO6dCjxnUZF1KDPzLwgsNG2Z9i54nsmOT
7xwfITqzE3gA2NSRNVY7oo8pwfGU1kEeySrMUxrRZ3EaerTS0jsIdSg=)


注意java提供的私钥KEY字符串是不包括开头-----BEGIN RSA PRIVATE KEY-----和结尾-----END RSA PRIVATE KEY-----的。


因为openssl默认产生的PEM格式的是包括开头-----BEGIN RSA PRIVATE KEY-----和结尾-----END RSA PRIVATE KEY-----的


根据提供的私钥KEY字符,demo中得到一个私钥对象(PrivateKey)。

下面是java得到私钥对象的代码:

public static PrivateKey getPrivateKey(String key) {
try {
byte[] keyBytes = (Base64.decodeBase64(key));
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
return privateKey;
} catch (Exception e) {
e.printStackTrace();
return null;
}

2)根据得到的私钥对象(PrivateKey),得到给定字符串的签名

public String sign(byte[] data, PrivateKey priKey) {
try {
Signature signature = Signature.getInstance("MD5WithRSA");
signature.initSign(priKey);
signature.update(data);
return Base64.encodeBase64URLSafeString(signature.sign());
} catch (Exception e) {
return null;
}
}


上面是java中的RSA的基本的流程,这里还有个验签的步骤,这里就不说了。


下面讲一下我在python中的使用,网上找了很多,也吸取了很多有用的东西,一开始用M2Crypto来做,这个库可以用pip install M2Crypto获取,但是这个库是依赖openssl的,先得安装openssl,我下得得官网得openssl-0.9.8-stable-SNAP-20150609.tar.gz,然后还得安装Perl,具体教程可以参考(Http://www.cnblogs.com/ZhouL3777/arcHive/2012/10/21/2732890.html),我M2Crypto完全安装成功后,后面可能是我使用的问题,签名出来的字符串跟java签名出来的不一样,这个地方以后有空再深入研究下。后面讲下重点,使用pycrypto库。


使用pycrypto来做RSA签名:

1.因为pyCrypto库不依赖openssl库,所以直接pip install pycrypto 就可以安装成功(我的python2.7.9,pycrypto版本是2.6.1)


2.签名函数:

'''
RSA签名
'''
def sign(signdata):
    '''
    @param signdata: 需要签名的字符串
    '''

    h=MD5.new(signdata)
    signer = pk.new(RSA.imporTKEy(p))
    signn=signer.sign(h)
    # signn=base64.b64encode(signn,["-","_"])
    signn=base64.urlsafe_b64encode(signn)
    return signn

关键介绍下函数中p,这个是私钥字符串,但是开头-----BEGIN RSA PRIVATE KEY-----和结尾-----END RSA PRIVATE KEY-----得加上。


我用客户提供的私钥字符串(不含开头-----BEGIN RSA PRIVATE KEY-----和结尾-----END RSA PRIVATE KEY-----的),然后p是加上开头-----BEGIN RSA PRIVATE KEY-----和结尾-----END RSA PRIVATE KEY-----的值。


# signn=base64.b64encode(signn,["-","_"])
    signn=base64.urlsafe_b64encode(signn)
这两个其实是一样的效果,把“+”转成“-”,把“/”转成“_”而已。


这样签名出来的跟java签名出来的东西一样了, 但是最后多了一个“=”。 这个我不知道为什么会多了一个“=”。  如果哪位高手知道,解释一下。


写的有点凌乱啊,望看的见谅。

--结束END--

本文标题: python RSA签名

本文链接: https://www.lsjlt.com/news/189760.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python RSA签名
    这周一个项目客户提供了一份对接文档要求用RSA数字签名,客户提供的是java的demo,但是自己不想用java来做,想用python来实现,就自己研究了下python下RSA签名。 先是研究了java-demo的流程和逻辑(因为是公司项...
    99+
    2023-01-31
    python RSA
  • Python 实现RSA SHA-1签名
    今天对接业务接口,传递的参数需要用RSA签名,三方只给了java的RSA签名Demo;但我们这边后端采用python开发,因此需要用Python来实现RSA签名。 Java版Demo import java.security.Ke...
    99+
    2023-01-31
    Python RSA SHA
  • python rsa 加密解密
    最近有需求,需要研究一下RSA加密解密安全;在网上百度了一下例子文章,很少有文章介绍怎么保存、传输、打印加密后的文本信息,都是千篇一律的。直接在一个脚本,加密后的文本信息赋于变量,然后立马调用解密。仔细想了...
    99+
    2022-06-04
    加密解密 python rsa
  • python实现rsa加密
    一 代码 import rsa key = rsa.newkeys(3000)#生成随机秘钥 privateKey = key[1]#私钥 publicKey = key[0]#公钥 message ='sanxi Now is b...
    99+
    2023-01-31
    python rsa
  • Python RSA加密解密
    一、RSA加密算法 RSA加密算法是一种非对称加密算法,加密的秘钥是由公钥和私钥两部分组成秘钥对,公钥用来加密消息,私钥用来解密消息,公钥是公开的,给对方进行加密,私钥则是用户自己保留,用来对加密的数...
    99+
    2023-09-03
    python RSA 加密 解密
  • python脚本 通过rsa priva
    说明:蓝色=命令名称    浅绿=命令参数    浅蓝=选项    紫色=目录    系统环境:CentOS  5.5 x86_64    python版本:Python 2.7.3参考paramiko和pycrypto官方文档写了一个通过...
    99+
    2023-01-31
    脚本 python priva
  • Python实现RSA加密解密
    目录前言一、安装模块二、生成密钥对三、加密四、解密五、完整代码前言 加密技术在数据安全存储,数据传输中发挥着重要作用,能够保护用户隐私数据安全,防止信息窃取。RSA是一种非对称加密技...
    99+
    2022-11-10
  • python rsa和Crypto.PublicKey.RSA 模块详解
    目录Crypto.PublicKey.RSA生成公私钥private.pempublic.pem读取公私钥验证使用公私钥加解密SHA256签名rsa生成公私钥private.pemp...
    99+
    2022-11-10
  • 前后端RSA互相加解密、加签验签、密钥对生成(Java)
    目录 一、序言二、关于PKCS#1和PKCS#8格式密钥1、简介2、区别 二、关于JSEncrypt三、关于jsrsasign四、前端RSA加解密、加验签示例1、相关依赖2、cryptoUtils工具类封装3、测试用例 五、...
    99+
    2023-08-25
    java 开发语言 前端 加解密
  • python实现请求数据包签名
    前言: 渗透测试遇到对请求体进行签名的情况,如果这是一个app的话,也能理解,但如果是一个web系统,对这种敏感数据做加密,并且对请求体做了签名,就会非常无语。还好在js中能找到了加...
    99+
    2022-11-13
  • Python+Tkinter打造签名设计工具
    目录1.概述2.网页分析1)网页缺陷2)页面分析3)数据的获取3.完整代码4.总结1.概述 前面我们已经详细的介绍了,怎么使用Tkinter创建属于自己的窗口界面了。整体布局呢我们已...
    99+
    2022-11-13
  • python----RSA非对称加密算法
    最近在搞项目的接口持续性自动化测试,好久没有更新博客了。 项目中接触到很多加密相关的数据,很多项目都会用到非对称加密算法来保证前端和服务器交互的数据安全。 下面介绍下python下怎么使用RSA加密算法: import rsa (pub...
    99+
    2023-01-31
    加密算法 非对称 python
  • 用 Python 来实现 RSA 加解密
    昨天看到一篇英文文章[1],展示了如何用 Python 来实现 RSA 算法,代码的逻辑与前文一文搞懂 RSA 算法一样,不太熟悉 RSA 的朋友可以看一下一文搞懂 RSA 算法,里面对什么是 RSA,RSA 的数学原理进行了说明,并举了一...
    99+
    2023-05-14
    Python RSA 加解密
  • Python的RSA加密和PBE加密
    最近在写接口的时候,遇到了需要使用RSA加密和PBE加密的情况,对方公司提供的DEMO都是JAVA的,我需要用python来实现。在网上搜了一下,python的RSA加密这块写的还是比较多的,但是PBE较少。所以我就讲讲我在RSA加密上面...
    99+
    2023-01-31
    Python RSA PBE
  • 简单的Python解密rsa案例
    目录⛳️ 本次反反爬实战案例背景⛳️ JS 代码扣取登录加密逻辑.js⛳️ 总结⛳️ 本次反反爬实战案例背景 本篇博客选择的案例是由 VX 好友提出,他希望有一篇博客能简单的介绍清楚...
    99+
    2022-11-11
  • java SM2签名和验签
    SM2签名也是通过私钥签名,公钥验签,这里的私钥格式可以是pkcs#1,pkcs#8,公钥格式可以是pkcs1和X509格式,这里只介绍标准的格式,公钥X509格式,私钥是pkcs#8格式,其他格式的需要进一步转换 这里需要借助Bouncy...
    99+
    2022-10-22
  • php、go、python后端接口签名实现
    php实现 function makeSignature($args, $key){ if(isset($args['sign'])) { $oldSign = $args['sign']; unset(...
    99+
    2023-09-01
    linux 签名 接口安全
  • 利用Python轻松生成艺术签名
    目录一、写在前面二、先看看效果三、代码展示1.需要用到的模块2.窗口名字/图标/大小/布局3.必要组件的定义4.输入框5.保存/生成按钮6.下拉框7.组件布局8.事件绑定9.生成签名...
    99+
    2022-11-12
  • [菜鸟实录]Python进行RSA加密
    一. 安装RSA模块      参考http://changfengmingzhi.blog.163.com/blog/static/167105288201331594158559/ 1. 下载ez_setup.py(http://p...
    99+
    2023-01-31
    菜鸟 实录 RSA
  • 使用python实现rsa算法代码
    RSA算法是一种非对称加密算法,是现在广泛使用的公钥加密算法,主要应用是加密信息和数字签名。 维基百科给出的RSA算法简介如下: 假设Alice想要通过一个不可靠的媒体接收Bob的一条私人讯息。她可以用...
    99+
    2022-06-04
    算法 代码 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作