導航:首頁 > 文檔加密 > 微信支付驗簽非對稱加密

微信支付驗簽非對稱加密

發布時間:2022-12-23 05:23:20

『壹』 什麼是非對稱加密

非對稱加密演算法是一種密鑰的保密方法。
非對稱加密演算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數據進行加密,那麼只有用對應的公開密鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種演算法叫作非對稱加密演算法。 非對稱加密演算法實現機密信息交換的基本過程是:甲方生成一對密鑰並將其中的一把作為公用密鑰向其它方公開;得到該公用密鑰的乙方使用該密鑰對機密信息進行加密後再發送給甲方;甲方再用自己保存的另一把專用密鑰對加密後的信息進行解密。
另一方面,甲方可以使用乙方的公鑰對機密信息進行簽名後再發送給乙方;乙方再用自己的私匙對數據進行驗簽。
甲方只能用其專用密鑰解密由其公用密鑰加密後的任何信息。 非對稱加密演算法的保密性比較好,它消除了最終用戶交換密鑰的需要。
非對稱密碼體制的特點:演算法強度復雜、安全性依賴於演算法與密鑰但是由於其演算法復雜,而使得加密解密速度沒有對稱加密解密的速度快。對稱密碼體制中只有一種密鑰,並且是非公開的,如果要解密就得讓對方知道密鑰。所以保證其安全性就是保證密鑰的安全,而非對稱密鑰體制有兩種密鑰,其中一個是公開的,這樣就可以不需要像對稱密碼那樣傳輸對方的密鑰了。這樣安全性就大了很多。

『貳』 微信支付遇到簽名驗證失敗的解決方法

1.下單的簽名方式使用MD5方式

2.利用下單獲取到的prepay_id,來進行調起支付階段的paySign的簽名

3.如果提示簽名驗證失敗:

        ①首先檢查你的5個參數是否完整:timeStamp,nonceStr,package,signType,paySign

        ②signType 必須是MD5,官方demo不是MD5,改為MD5,這也是大坑,當然我自己用python 寫的時候直接用的MD5

        ③在做paySign簽名的時候,需要6個參數,上述5個參數去掉paySign(不參與簽名),加上appId(注意是大寫I,這是個大坑,這個錯了那簽名必然失敗)和key

        ④如果上述步驟沒問題還是失敗,那麼去https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=20_1驗證以下你的簽名是否通過

        ⑤還有一點簽名的時候必須把所有英文全部轉為大寫

4.歡迎評論,多多交流

『叄』 微信小程序-微信支付簽名驗證

在微信支付之後,小程序會主動向服務端發送支付狀態.為了防止惡意篡改,必須生成簽名發送給服務端進行驗證.

簽名生成官方文檔:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3

簽名驗證分為如下幾步:

1.與服務端確認上傳的簽名內容(即上傳參數key=value)以及加密方式.並且要到商戶平台設置的密鑰key.

2.生成隨機字元串nonceStr.

3.將要上傳的參數,對參數按照key=value的格式,並按照參數名ASCII字典序排序,比如:

假設傳送的參數如下: 

appid: wxd930ea5d5a258f4f 

mch_id: 10000100 

device_info: 1000 

body: test 

nonce_str: ibuaiVcKdpRxkhJA

則:stringA="appid=wxd930ea5d5a258f4f&body=test&device_info=1000&mch_id=10000100&nonce_str=ibuaiVcKdpRxkhJA";

4.拼接API密鑰,例如:stringSignTemp=stringA+"&key=" //註:key為商戶平台設置的密鑰key

5.對拼接秘鑰後的字元串進行加密並且轉換為大寫.(加密方式自定)

6.將參數以及加密得到的sign一起上傳給服務端進行驗證.

7.查看服務端返回結果.

謝謝大家~

『肆』 圖文徹底搞懂非對稱加密(公鑰密鑰)

前文詳細講解了對稱加密及演算法原理。那麼是不是對稱加密就萬無一失了呢?對稱加密有一個天然的缺點,就是加密方和解密方都要持有同樣的密鑰。你可以能會提出疑問:既然要加、解密,當然雙方都要持有密鑰,這有什麼問題呢?別急,我們繼續往下看。

我們先看一個例子,小明和小紅要進行通信,但是不想被其他人知道通信的內容,所以雙方決定採用對稱加密的方式。他們做了下面的事情:

1、雙方商定了加密和解密的演算法

2、雙方確定密鑰

3、通信過程中採用這個密鑰進行加密和解密

這是不是一個看似完美的方案?但其中有一個步驟存在漏洞!

問題出在步驟2:雙方確定密鑰!

你肯定會問,雙方不確定密鑰,後面的加、解密怎麼做?

問題在於確定下來的密鑰如何讓雙方都知道。密鑰在傳遞過程中也是可能被盜取的!這里引出了一個經典問題:密鑰配送問題。

小明和小紅在商定密鑰的過程中肯定會多次溝通密鑰是什麼。即使單方一次確定下來,也要發給對方。加密是為了保證信息傳輸的安全,但密鑰本身也是信息,密鑰的傳輸安全又該如何保證呢?難不成還要為密鑰的傳輸再做一次加密?這樣不就陷入了死循環?

你是不是在想,密鑰即使被盜取,不還有加密演算法保證信息安全嗎?如果你真的有這個想法,那麼趕緊復習一下上一篇文章講的杜絕隱蔽式安全性。任何演算法最終都會被破譯,所以不能依賴演算法的復雜度來保證安全。

小明和小紅現在左右為難,想加密就要給對方發密鑰,但發密鑰又不能保證密鑰的安全。他們應該怎麼辦呢?

有如下幾種解決密鑰配送問題的方案:

非對稱加密也稱為公鑰密碼。我更願意用非對稱加密這種叫法。因為可以體現出加密和解密使用不同的密鑰。

對稱加密中,我們只需要一個密鑰,通信雙方同時持有。而非對稱加密需要4個密鑰。通信雙方各自准備一對公鑰和私鑰。其中公鑰是公開的,由信息接受方提供給信息發送方。公鑰用來對信息加密。私鑰由信息接受方保留,用來解密。既然公鑰是公開的,就不存在保密問題。也就是說非對稱加密完全不存在密鑰配送問題!你看,是不是完美解決了密鑰配送問題?

回到剛才的例子,小明和下紅經過研究發現非對稱加密能解決他們通信的安全問題,於是做了下面的事情:

1、小明確定了自己的私鑰 mPrivateKey,公鑰 mPublicKey。自己保留私鑰,將公鑰mPublicKey發給了小紅

2、小紅確定了自己的私鑰 hPrivateKey,公鑰 hPublicKey。自己保留私鑰,將公鑰 hPublicKey 發給了小明

3、小明發送信息 「周六早10點soho T1樓下見」,並且用小紅的公鑰 hPublicKey 進行加密。

4、小紅收到信息後用自己的私鑰 hPrivateKey 進行解密。然後回復 「收到,不要遲到」 並用小明的公鑰mPublicKey加密。

5、小明收到信息後用自己的私鑰 mPrivateKey 進行解密。讀取信息後心裡暗想:還提醒我不遲到?每次遲到的都是你吧?

以上過程是一次完整的request和response。通過這個例子我們梳理出一次信息傳輸的非對稱加、解密過程:

1、消息接收方准備好公鑰和私鑰

2、私鑰接收方自己留存、公鑰發布給消息發送方

3、消息發送方使用接收方公鑰對消息進行加密

4、消息接收方用自己的私鑰對消息解密

公鑰只能用做數據加密。公鑰加密的數據,只能用對應的私鑰才能解密。這是非對稱加密的核心概念。

下面我用一個更為形象的例子來幫助大家理解。

我有下圖這樣一個信箱。

由於我只想接收我期望與之通信的朋友信件。於是我在投遞口加了一把鎖,這把鎖的鑰匙(公鑰)我可以復制n份,發給我想接受其信件的人。只有這些人可以用這把鑰匙打開寄信口,把信件投入。

相信通過這個例子,可以幫助大家徹底理解公鑰和私鑰的概念。

RSA 是現在使用最為廣泛的非對稱加密演算法,本節我們來簡單介紹 RSA 加解密的過程。

RSA 加解密演算法其實很簡單:

密文=明文^E mod N

明文=密文^D mod N

RSA 演算法並不會像對稱加密一樣,用玩魔方的方式來打亂原始信息。RSA 加、解密中使用了是同樣的數 N。公鑰是公開的,意味著 N 也是公開的。所以私鑰也可以認為只是 D。

我們接下來看一看 N、E、D 是如何計算的。

1、求 N

首先需要准備兩個很大質數 a 和 b。太小容易破解,太大計算成本太高。我們可以用 512 bit 的數字,安全性要求高的可以使用 1024,2048 bit。

N=a*b

2、求 L

L 只是生成密鑰對過程中產生的數,並不參與加解密。L 是 (a-1) 和 (b-1) 的最小公倍數

3、求 E(公鑰)

E 有兩個限制:

1<E<

E和L的最大公約數為1

第一個條件限制了 E 的取值范圍,第二個條件是為了保證有與 E 對應的解密時用到的 D。

4、求 D(私鑰)

D 也有兩個限制條件:

1<D<L

E*D mod L = 1

第二個條件確保密文解密時能夠成功得到原來的明文。

由於原理涉及很多數學知識,這里就不展開細講,我們只需要了解這個過程中用到這幾個數字及公式。這是理解RSA 安全性的基礎。

由於 N 在公鑰中是公開的,那麼只需要破解 D,就可以解密得到明文。

在實際使用場景中,質數 a,b 一般至少1024 bit,那麼 N 的長度在 2048 bit 以上。D 的長度和 N 接近。以現在計算機的算力,暴力破解 D 是非常困難的。

公鑰是公開的,也就是說 E 和 N 是公開的,那麼是否可以通過 E 和 N 推斷出 D 呢?

E*D mod L = 1

想要推算出 D 就需要先推算出 L。L 是 (a-1) 和 (b-1) 的最小公倍數。想知道 L 就需要知道質數 a 和 b。破解者並不知道這兩個質數,想要破解也只能通過暴力破解。這和直接破解 D 的難度是一樣的。

等等,N 是公開的,而 N = a*b。那麼是否可以對 N 進行質因數分解求得 a 和 b 呢?好在人類還未發現高效進行質因數分解的方法,因此可以認為做質因數分解非常困難。

但是一旦某一天發現了快速做質因數分解的演算法,那麼 RSA 就不再安全

我們可以看出大質數 a 和 b 在 RSA 演算法中的重要性。保證 a 和 b 的安全也就確保了 RSA 演算法的安全性。a 和 b 是通過偽隨機生成器生成的。一旦偽隨機數生成器的演算法有問題,導致隨機性很差或者可以被推斷出來。那麼 RSA 的安全性將被徹底破壞。

中間人攻擊指的是在通信雙方的通道上,混入攻擊者。他對接收方偽裝成發送者,對放送放偽裝成接收者。

他監聽到雙方發送公鑰時,偷偷將消息篡改,發送自己的公鑰給雙方。然後自己則保存下來雙方的公鑰。

如此操作後,雙方加密使用的都是攻擊者的公鑰,那麼後面所有的通信,攻擊者都可以在攔截後進行解密,並且篡改信息內容再用接收方公鑰加密。而接收方拿到的將會是篡改後的信息。實際上,發送和接收方都是在和中間人通信。

要防範中間人,我們需要使用公鑰證書。這部分內容在下一篇文章里會做介紹。

和對稱加密相比較,非對稱加密有如下特點:

1、非對稱加密解決了密碼配送問題

2、非對稱加密的處理速度只有對稱加密的幾百分之一。不適合對很長的消息做加密。

3、1024 bit 的 RSA不應該在被新的應用使用。至少要 2048 bit 的 RSA。

RSA 解決了密碼配送問題,但是效率更低。所以有些時候,根據需求可能會配合使用對稱和非對稱加密,形成混合密碼系統,各取所長。

最後提醒大家,RSA 還可以用於簽名,但要注意是私鑰簽名,公鑰驗簽。發信方用自己的私鑰簽名,收信方用對方公鑰驗簽。關於簽名,後面的文章會再詳細講解。

『伍』 開放平台API介面安全性設計——微信支付為例

API介面,類似 http://mypay.com/refund/order_id=123&mch_id=123 ,這個請求我以商戶mch_id=123的身份給訂單號為order_id=123退款,如果伺服器不辯別請求發起者的身份直接做相應的操作,那是及其危險的。

一般的,在PC端,我們是通過加密的cookie來做會員的辨識和維持會話的;但是cookie是屬於瀏覽器的本地存儲功能。APP端不能用,所以我們得通過token參數來辨識會員;而這個token該如何處理呢?
延伸開來,介面的安全性主要圍繞Token、Timestamp和Sign三個機制展開設計,保證介面的數據不會被篡改和重復調用。

一般來說,在前端對數據做加密或者前面,是不現實的。前後端使用HTTP協議進行交互的時候,由於HTTP報文為明文,所以通常情況下對於比較敏感的信息可以通過在前端加密,然後在後端解密實現"混淆"的效果,避免在傳輸過程中敏感信息的泄露(如,密碼,證件信息等)。不過前端加密只能保證傳輸過程中信息是『混淆』過的,對於高手來說,打個debugger,照樣可以獲取到數據,並不安全,所謂的前端加密只是稍微增加了攻擊者的成本,並不能保證真正的安全。即使你說在前端做了RSA公鑰加密,也很有可能被高手獲取到公鑰,並使用該公鑰加密數據後發給服務端,所以務必認為前端的數據是不可靠的,服務端要加以辯別。敏感信息建議上https。

所以一般建議上https,敏感信息md5混淆,前端不傳輸金額欄位,而是傳遞商品id,後端取商品id對應的金額,將金額等參數加簽名發送到支付系統。金額可以是明文的。

token授權機制 :用戶使用用戶名密碼登錄後,後台給客戶端返回一個token(通常是UUID),並將Token-UserId鍵值對存儲在redis中,以後客戶端每次請求帶上token,服務端獲取到對應的UserId進行操作。如果Token不存在,說明請求無效。
弊端 :token可以被抓包獲取,無法預防MITM中間人攻擊

用戶每次請求都帶上當前時間的時間戳timestamp,伺服器收到請求後對比時間差,超過一定時長(如5分鍾),則認為請求失效。時間戳超時機制是防禦DOS攻擊的有效手段。

將token,timestamp等其他參數以字典序排序,再加上一個客戶端私密的唯一id(這種一般做在服務端,前端無法安全保存這個id)或使用私鑰簽名,將前面的字元串做MD5等加密,作為sign參數傳遞給服務端。

地球上最重要的加密演算法:非對稱加密的RSA演算法。公鑰加密的數據,可以用私鑰解密;私鑰簽名(加密)的數據,可以用公鑰驗簽。

RSA原理是對極大整數做因數分解,以下摘自維基網路。

暫時比較忙沒時間,將於7月29日晚更新。
來更新啦。
微信支付安全規范,可以查看官方文檔 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3
第1點中,其簽名演算法最重要的一步,是在最後拼接了商戶私密的API密鑰,然後通過md5生成簽名,這時即使金額是明文也是安全的,如果有人獲取並修改了金額,但是簽名欄位他是無法偽造的,因為他無法知道商戶的API密鑰。當然,除了微信支付的拼接API生成簽名的方法,我們也可以通過java自帶的security包進行私鑰簽名。其中nonce隨機字元串,微信支付應該做了校驗,可以防止重放攻擊,保證一次請求有效,如果nonce在微信支付那邊已經存在,說明該請求已執行過,拒絕執行該請求。

阮一峰老師的博客-RSA演算法原理: http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html
維基網路: https://zh.wikipedia.org/wiki/RSA%E5%8A%A0%E5%AF%86%E6%BC%94%E7%AE%97%E6%B3%95

『陸』 微信支付頁面怎麼加密

微信支付頁面加密,具體操作步驟如下:
操作環境:
品牌型號:iPhone13
系統版本:iOS15.3.1
app版本:v8.0.18
一、首先打開微信app,在首頁找到並點擊底端的我的選項,這時在個人頁面點擊支付功能,
二、在支付頁面選擇右上角三點圖標,接下來點擊修改支付密碼,
三、先輸入舊的支付密碼,以驗證身份,這時輸入新的支付密碼,然後再輸入一次確認,點擊完成就可以了。
拓展資料
微信支持多種語言,以及手機數據網路。用戶可拍攝照片或視頻發送至「朋友圈」。用戶可在聯系人列表中選擇聯系人,使用雲端服務將數據備份和恢復,以保護用戶通訊錄數據。微信中還有訂閱號、服務號、企業號等功能,可以供用戶訂閱他們喜歡的公眾號,也提供一個良好的自媒體平台,每個人都可以申請個人訂閱號發布個人的文章等,用戶可以透過訂閱或者搜索獲取微信公眾號的文章,用戶使用微信大部分功能都不會被收取費用。
微信的主要社交功能,只有互相是微信聯系人才可以進行即時通訊。在通幀中,有文字消息、語音消息、語音輸入、語音與視頻聊天、照片與視頻分享、定位分享、微信紅包、轉賬等功能。利用藍牙和其他近場通信,微信可以和附近的人獲取聯系,並提供各種功能,方便人們隨時聯系。同時,它還與騰訊QQ和臉譜等社交網路服務平台集成。照片還可以加上濾鏡和注釋,文字信息還可以機器翻譯。
微信支持不同類型的即時信息,包括文字簡訊、視頻、語音簡訊、實時對講和表情包。用戶可以發送事先保存或實時的圖片和視頻、其他用戶的名片、優惠券、紅包或當前的定位。
用戶可以通過語音聊天室和一群人語音對講,但與在群里發語音不同的是,這個聊天室的消息幾乎是實時的,並且不會留下任何記錄,在手機屏幕關閉的情況下也仍可進行實時聊天。
微信是由深圳騰訊控股有限公司(Tencent Holdings Limited)於2010年10月籌劃啟動,由張小龍帶領騰訊廣州研發中心產品團隊打造。騰訊公司於2011年1月21日推出的一款支持Android以及iOS等移動操作系統的即時通信軟體,其面對智能手機用戶。
用戶可以透過客戶端與好友分享文字、圖片以及貼圖,並支持分組聊天和語音、視訊對講功能、廣播(一對多)消息、照片/視訊共享、位置共享、消息交流聯系、微信支付、理財通,游戲等服務,並有共享流媒體內容的Feed和基於位置的社交插件「搖一搖」、「朋友探測器」和「附近的人」快速新增好友。

『柒』 關於驗簽

1.hash計算

是把任意長度的輸入通過散列演算法變成固定長度的輸出,該輸出就是散列值。簡略講就是把任意長度壓縮到固定長度的摘要函數。

2.公鑰和私鑰

(1)私鑰

私鑰加密又稱對稱加密,即信息的加密方和解密方用同一個秘鑰去加密和解密數據。優點是加/解密速度快,適合對大量數據進行加解密。缺點是不易管理。

單秘鑰加密法,是指用同一個秘鑰進行加解密,也稱對稱加密和秘鑰加密。由於加密和解密方都用同一種加密方式,所以這種方式本身就不安全。

(2)公鑰

非對稱加密,這種加密方式需要兩個秘鑰:一個公鑰一個私鑰,公鑰和私鑰是成對的。用某個私鑰進行加密,需要對應的公鑰解密;對用某個公鑰加密,需要對應私鑰才能解開。

非對稱加密的方法保密性好,但是加密和解密花費時間長、速度慢。

3.驗簽

對於接收到的報文,本地進行一次簽名過程,對比本地簽名產生的簽名和接收的簽名值,若相同則驗簽成功。

4.數字信封加密

針對敏感信息,使用隨機生成的私鑰進行對稱加密。同時,為了保證堆成秘鑰的安全性,使用公鑰證書,對對稱私鑰進行非對稱加密,得到數字信封。

5.數字信封解密

針對接收到的數字信封,進行數字信封加密的逆向操作,得到敏感信息明文,即為數字信封解密。

6.數字證書

網路通訊中標志各通訊各方身份的一系列數據,類似於現實生活中的身份證。它是由一個權威機構發行的,人們可以在互聯網上用它識別對方的身份,證書格式遵循ITUTX.509國際標准。

閱讀全文

與微信支付驗簽非對稱加密相關的資料

熱點內容
上門正骨用什麼app 瀏覽:756
安卓為什麼免費使用 瀏覽:397
加密貨幣都有哪些平台 瀏覽:625
python和matlab難度 瀏覽:388
python爬蟲很難學么 瀏覽:572
小米解壓積木可以組成什麼呢 瀏覽:816
為什麼滴滴出行app還能用 瀏覽:564
怎麼升級手機android 瀏覽:922
php權威編程pdf 瀏覽:994
扣扣加密技巧 瀏覽:720
蘋果如何創建伺服器錯誤 瀏覽:496
軟考初級程序員大題分值 瀏覽:474
js壓縮視頻文件 瀏覽:578
linux如何通過命令創建文件 瀏覽:991
應用加密app還能訪問應用嘛 瀏覽:435
安卓怎麼用支付寶交違章罰款 瀏覽:667
php面向對象的程序設計 瀏覽:506
數據挖掘演算法書籍推薦 瀏覽:895
投訴聯通用什麼app 瀏覽:152
web伺服器變更ip地址 瀏覽:956