文档章节

python支付验证中的各种签名验证

fromdtor
 fromdtor
发布于 2016/09/09 14:19
字数 216
阅读 115
收藏 1

python中的各种签名验证

# -*- coding:utf-8 -*-
import base64
import hmac
import hashlib
import M2Crypto
from Crypto.Hash import SHA, MD5
from Crypto.PublicKey import RSA
from Crypto.Signature import PKCS1_v1_5
from Crypto.Cipher import DES3


def ensure_utf8(s):
    if isinstance(s, unicode):
        s = s.encode('utf8')
    return s

# hmac
def hmac_sign(s, secret):
    return hmac.new(key=secret, msg=s, digestmod=hashlib.sha1).hexdigest()

# md5
def md5_sign(s):
    return hashlib.md5(s).hexdigest()

# rsa
def rsa_sign(s, private_key):
    s = SHA.new(s)
    pk = RSA.importKey(private_key)
    signer = PKCS1_v1_5.new(pk)
    return base64_encode(signer.sign(s))

# rsa verify
def rsa_verify(s, key, sign, use_md5=False):
    if use_md5:
        s = MD5.new(s)
    else:
        s = SHA.new(s)
    pk = RSA.importKey(key)
    verifier = PKCS1_v1_5.new(pk)
    return verifier.verify(s, base64.b64decode(sign))

# rsa decrypt to dict
def rsa_decrypt_to_dict(s, key):
    pk = M2Crypto.RSA.load_pub_key_bio(M2Crypto.BIO.MemoryBuffer(key))
    params = pk.public_decrypt(base64.b64decode(s), M2Crypto.RSA.pkcs1_padding)
    rtv = {}
    for f in params.split('&'):
        k, _, v = f.partition('=')
        rtv[k] = v
    return rtv

# base64encode
def base64_encode(s):
    return base64.b64encode(s)

# base64decode
def base64_decode(s):
    return base64.b64decode(s)


def des3ecb_decrypt(s, key):
    cipher = DES3.new(key, DES3.MODE_ECB)
    return cipher.decrypt(base64.standard_b64decode(s))

© 著作权归作者所有

fromdtor

fromdtor

粉丝 25
博文 49
码字总数 10577
作品 0
朝阳
高级程序员
私信 提问
Android-V1、V2签名包和快速集成美团多渠道打包(原创)

本文已独家授权 郭霖 ( guolin_blog) 公众号发布! 今天的文章主要介绍的是Android V1、V2签名包的基本概念和使用场景以及如何十分钟快速掌握美团多渠道打包。 内容概览: 1:美团多渠道打包...

小猪看流星
2018/01/29
0
0
比特币如何使用BIP70支付协议API

支付协议是用于指代BIP70,71,72和73中指定的协议的术语。支付协议旨在通过用可编码更复杂参数的小文件替换普遍存在的比特币地址来为比特币添加附加功能。它指定了直接在资金发送方和接收方之...

geek12345
2018/10/08
0
0
极验验证demo(django+vue)

在使用之前,曾经试过用阿里云的人机验证,不过在签名部分比较复杂,下载sdk后需要自己写很多,折腾了一下,还是放弃。而腾讯云的人机验证python版本有demo,直接填写keyhe1secret就可以使用...

xiaoge2016
2018/11/16
0
0
太简单!只学十分钟,Python菜鸟也能开发一个区块链客户端

区块链技术以其去中心化特性成为又一具有颠覆性特征的技术。Python作为一种面向对象的解释型计算机程序设计语言,因其具有丰富和强大的库,常被称为“胶水语言”,简单、易上手,是区块链技术...

技术小能手
2018/07/25
0
0
使用 Lua 编写一个 Nginx 认证模块

过去两天里,我解决了一个非常有趣的问题。我用一个nginx服务器作为代理,需要能够向其中添加一个认证层,使其能够使用外部的认证源(比如某个web应用)来进行验证,如果用户在外部认证源有账...

oschina
2013/09/08
13.5K
19

没有更多内容

加载失败,请刷新页面

加载更多

Linux修改时区的正确方法【修改时间,需要修改软连接,靠谱】

CentOS和Ubuntu的时区文件是/etc/localtime,但是在CentOS7以后localtime以及变成了一个链接文件 [root@centos7 ~]# ll /etc/localtime lrwxrwxrwx 1 root root 33 Oct 12 11:01 /etc/loca......

Airship
29分钟前
0
0
《Netkiller Spring Cloud 手札》之 Master / Slave 主从数据库数据源配置

5.19.1. Master / Slave 主从数据库数据源配置 5.19.1.1. application.properties spring.datasource.master.driverClassName = com.mysql.cj.jdbc.Driverspring.datasource.master.url=j......

netkiller-
33分钟前
36
0
大数据(hadoop-HDFS的本地开发环境的配置与常见的HDFS的JAVA API)

HDFS的本地开发环境搭建 1:所需工具 1)hadoop2.7.3安装包 2)hadoop-eclipse-plugin插件 https://github.com/winghc/hadoop2x-eclipse-plugin 2:搭建过程 1:解压hadoop2.7.3文件2:下载...

这很耳东先生
44分钟前
1
0
TCP协议的定义和丢包时的重传机制

TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面。所以学习TCP本身是个比较痛苦的过程,但对于学习的过程却能让人有很多收获。关于TCP这个协议的细节,...

tantexian
45分钟前
2
0
图解Tomcat类加载机制(阿里面试题)

Tomcat的类加载机制是违反了双亲委托原则的,对于一些未加载的非基础类(Object,String等),各个web应用自己的类加载器(WebAppClassLoader)会优先加载,加载不到时再交给commonClassLoader走双...

群星纪元
50分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部