摘要:在與第三方服務(wù)對接時(shí),加密與解密,加簽與驗(yàn)簽是這個(gè)過程中的關(guān)鍵一步一般情況下,對接服務(wù)中會有兩對公私鑰。傳回來的數(shù)據(jù),使用自己的私鑰解密,使用對方的公鑰驗(yàn)簽。加密加密超長字節(jié)個(gè)字節(jié)一加密解密解密超長字符一解密加簽驗(yàn)簽簽名待驗(yàn)證簽名
在與第三方服務(wù)對接時(shí),加密與解密,加簽與驗(yàn)簽是這個(gè)過程中的關(guān)鍵一步
一般情況下,對接服務(wù)中會有兩對公私鑰。使用對方公鑰進(jìn)行加密,使用自己私鑰進(jìn)行加簽。傳回來的數(shù)據(jù),使用自己的私鑰解密,使用對方的公鑰驗(yàn)簽。
import base64 from Crypto.PublicKey import RSA from Crypto.Hash import SHA from Crypto.Cipher import PKCS1_v1_5 from Crypto.Signature import PKCS1_v1_5 as SIGN_PKCS PUB_KEY = RSA.importKey(open("rsa_public_key.pem","r").read()) PRI_KEY = RSA.importKey(open("rsa_private_key.pem","r").read())
加密
def split_data(l, n): for i in range(0, len(l), n): yield l[i: i+n] def encrypt(params): raw = params.encode("utf-8") cipher = PKCS1_v1_5.new(PUB_KEY) # 加密超長字節(jié)117個(gè)字節(jié)一加密 content = b"".join([cipher.encrypt(x) for x in chunks(raw, 117)]) return base64.b64encode(content)
解密
def decrypt(data): raw = data.encode("utf-8") decrypt = PKCS1_v1_5.new(PRI_KEY).decrypt # 解密超長字符128一解密 content = b"".join(decrypt(x, object()) for x in chunks(raw, 128)) return content.decode()
加簽
def signer(data): signstr = data.encode("utf-8") sign = SIGN_PKCS.new(PRI_KEY).sign(SHA.new(signstr)) return base64.b64encode(sign)
驗(yàn)簽
def verify_sign(unsign, raw_sign): """ unsign: 簽名 raw_sign: 待驗(yàn)證簽名 """ assert SIGN_PKCS.new(PUB_KEY).verify(SHA.new(unsign.encode("utf-8")), raw_sign)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/45551.html
摘要:工商銀行中國工商銀行提現(xiàn)支付域名項(xiàng)目名接口我們第一次使用支付請求對象,是為了將其生成簽名原串。第一次加密是將不包含屬性值的支付請求對象封裝的簽名原串和我們生成的私鑰共同加密成簽名字符串,放進(jìn)支付請求對象中的屬性中。 引題 【備注】簽名原串的源碼放在git上了,請大家參看:項(xiàng)目源碼 筆者最近在做支付、調(diào)用天貓優(yōu)惠券、綁定銀行卡相關(guān)的業(yè)務(wù),在這些業(yè)務(wù)中,我們都需要將數(shù)據(jù)加密。然而,數(shù)據(jù)的加...
摘要:基于注解生成加簽驗(yàn)簽。后來發(fā)現(xiàn)如下的問題有些字段太大,不想?yún)⑴c驗(yàn)簽,但是無法方便的調(diào)整。感覺這樣有很大的弊端,完全失去了靈活性。 checksum 基于 java 注解生成加簽驗(yàn)簽 checksum。 開源地址:github checksum 創(chuàng)作緣由 原來的代碼中,checksum 的生成是用的工具類方法。 后來發(fā)現(xiàn)如下的問題: 有些字段太大,不想?yún)⑴c驗(yàn)簽,但是無法方便的調(diào)整。 ...
摘要:錢可以存儲在自己的余額中,這就相當(dāng)于微信錢包,余額可以提現(xiàn)到銀行卡的中。我們的第三方支付平臺是連連支付,杭州的一家公司。私鑰怎么加簽每個(gè)公司的加簽方式是不一樣的,支付寶有支付寶的加簽方式,微信有微信的加簽方式。 導(dǎo)讀 筆者在校期間,通過自學(xué)java。學(xué)校里也開過這門課,但是,講的都是一些基礎(chǔ),比如java的表達(dá)式、基本類型、自定義類型等等。也都是很基礎(chǔ)的東西,就連lambda表達(dá)式都沒...
摘要:首先安裝確認(rèn)安裝的是版本版本的是不一樣的生成公私鑰對生成私鑰同時(shí)包含公鑰此處為序列化公鑰私鑰并寫入文件存儲序列化私鑰無密碼也可以加入密碼保護(hù)私鑰將私鑰寫入文件將公鑰寫入文件也可以采用其他序列化方法比如對公鑰生成格式的序列化字符串輸出類似于 首先 安裝cryptography sudo pip3 install cryptography 確認(rèn)安裝的是2.1.x版本 (1.x版本的api是...
摘要:加解密中必須考慮到的密鑰長度明文長度和密文長度問題。而只要用到,那么就要占用實(shí)際的明文長度,于是實(shí)際明文長度需要減去字節(jié)長度。所以如果要對任意長度的數(shù)據(jù)進(jìn)行加密,就需要將數(shù)據(jù)分段后進(jìn)行逐一加密,并將結(jié)果進(jìn)行拼接。 RSA加解密中必須考慮到的密鑰長度、明文長度和密文長度問題。明文長度需要小于密鑰長度,而密文長度則等于密鑰長度。因此當(dāng)加密內(nèi)容長度大于密鑰長度時(shí),有效的RSA加解密就需要對內(nèi)...
閱讀 1129·2021-10-14 09:43
閱讀 1185·2021-10-11 11:07
閱讀 3133·2021-08-18 10:23
閱讀 1516·2019-08-29 16:18
閱讀 1032·2019-08-28 18:21
閱讀 1501·2019-08-26 12:12
閱讀 3789·2019-08-26 10:11
閱讀 2534·2019-08-23 18:04