摘要:第二次訪問接口,客戶端需使用返回公鑰加密訪問參數(shù),之后將加密后的參數(shù)和一起發(fā)送給服務(wù)端進(jìn)行驗(yàn)證。關(guān)于函數(shù)的詳細(xì)介紹可以看上一位朋友的博客,鏈接在此簡(jiǎn)單總結(jié)用加密公鑰傳遞給用公鑰加密信息傳遞給解密
RSA非對(duì)稱加密,在網(wǎng)絡(luò)鑒權(quán)中使用很多。本人也是在PHP與C++交互鑒權(quán)時(shí)出現(xiàn)問題,在解決問題過程中發(fā)現(xiàn),網(wǎng)上對(duì)相關(guān)問題的描述很少,所在這里記錄下,希望對(duì)遇到相似問題的朋友有所幫助。
問題情景:
由于項(xiàng)目需求,需要PHP寫接口提供給C++調(diào)用,在接口返回?cái)?shù)據(jù)之前,需要對(duì)訪問者進(jìn)行鑒權(quán)已增加數(shù)據(jù)訪問安全性。
針對(duì)需求,我們采用的是兩次握手完成鑒權(quán)。
第一次訪問接口不帶參數(shù),接口返回token和RSA公鑰(公鑰用base64加密,方便傳輸)。
第二次訪問接口,客戶端需使用返回公鑰加密訪問參數(shù),之后將加密后的參數(shù)和token一起發(fā)送給服務(wù)端進(jìn)行驗(yàn)證。服務(wù)端收到訪問數(shù)據(jù)后,對(duì)加密參數(shù)用私鑰解密,檢查參數(shù)是否符合要求,完成鑒權(quán)過程。
我們的問題出現(xiàn)在第二次訪問時(shí),發(fā)送過來(lái)的加密參數(shù),無(wú)法通過私鑰解密。
注:公鑰和私鑰有PHP生成,使用這對(duì)公鑰私鑰可以在PHP端完成加解密,使用相同的公鑰私鑰也可以在C++端完成加解密,但兩者互通就會(huì)出現(xiàn)問題。
解決過程:
直接上正確思路,我們使用相同公鑰對(duì)相同參數(shù)進(jìn)行加密后發(fā)現(xiàn),兩者長(zhǎng)度相差很大,于是判定應(yīng)該是加密后兩者的編碼方式不同,據(jù)我了解RSA加密后C++端應(yīng)該是輸出十六進(jìn)制的密文,而PHP使用openssl_public_encrypt 公鑰加密后的密文應(yīng)該是ASCII碼字符串,兩者長(zhǎng)度相差很大。
根據(jù)以上判斷,C++發(fā)送給PHP的是十六進(jìn)制密文,而使用openssl_private_decrypt解密需要的是ASCII碼字符串,當(dāng)然解不出來(lái)了。既然知道問題所在,那我們把十六進(jìn)制的密文轉(zhuǎn)換成ASCII碼字符串不就可以解決問題了,于是在PHP端使用pack("H*", param) 轉(zhuǎn)碼密文,之后果然順利解密。
關(guān)于pack函數(shù)的詳細(xì)介紹可以看OSC上一位朋友的博客,鏈接在此
簡(jiǎn)單總結(jié):
1.用pack(“H*”)
2.php base64加密公鑰傳遞給C++
3.C++ 用公鑰加密信息 post傳遞給PHP解密
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/28343.html
摘要:安全總是很重要的,各個(gè)語(yǔ)言對(duì)于通用的加密算法都會(huì)有實(shí)現(xiàn)。對(duì)于和加密算法本身,請(qǐng)查閱相關(guān)資料在中,很多功能經(jīng)常是一個(gè)函數(shù)解決而中的卻不是。該文討論加密解密。一概要這是一個(gè)非對(duì)稱加密算法,一般通過公鑰加密,私鑰解密。 安全總是很重要的,各個(gè)語(yǔ)言對(duì)于通用的加密算法都會(huì)有實(shí)現(xiàn)。前段時(shí)間,用Go實(shí)現(xiàn)了RSA和DES的加密解密,在這分享一下。(對(duì)于RSA和DES加密算法本身,請(qǐng)查閱相關(guān)資料) 在P...
摘要:項(xiàng)目地址前后端交互時(shí)為了保證信息安全可使用方式加密信息,在數(shù)據(jù)量大的時(shí)候可采用結(jié)合方式。由于加密和解密使用同樣規(guī)則簡(jiǎn)稱密鑰,這被稱為對(duì)稱加密算法。從那時(shí)直到現(xiàn)在,算法一直是最廣為使用的非對(duì)稱加密算法。 RSA-JS-PHP 項(xiàng)目地址rsa-js-php 前后端交互時(shí)為了保證信息安全可使用RSA方式加密信息,在數(shù)據(jù)量大的時(shí)候可采用DES+RSA結(jié)合方式。DEMO演示地址 一點(diǎn)歷史 1...
摘要:簡(jiǎn)介地址實(shí)際項(xiàng)目中的登陸認(rèn)證接口調(diào)用支付接口調(diào)用等場(chǎng)合經(jīng)常涉及到等算法。各大銀行接口中經(jīng)常使用算法對(duì)調(diào)用接口參數(shù)進(jìn)行簽名防篡改。使用端見端見特點(diǎn)便于理解,使用廣泛。這就使加密的計(jì)算量很大。對(duì)方收到信息后,用不同的密鑰解密并可核對(duì)信息摘要。 PHP-RSA簡(jiǎn)介 github 地址 https://github.com/lmxdawn/PH... 實(shí)際項(xiàng)目中的登陸認(rèn)證、web api接口調(diào)...
摘要:簡(jiǎn)介地址實(shí)際項(xiàng)目中的登陸認(rèn)證接口調(diào)用支付接口調(diào)用等場(chǎng)合經(jīng)常涉及到等算法。各大銀行接口中經(jīng)常使用算法對(duì)調(diào)用接口參數(shù)進(jìn)行簽名防篡改。使用端見端見特點(diǎn)便于理解,使用廣泛。這就使加密的計(jì)算量很大。對(duì)方收到信息后,用不同的密鑰解密并可核對(duì)信息摘要。 PHP-RSA簡(jiǎn)介 github 地址 https://github.com/lmxdawn/PH... 實(shí)際項(xiàng)目中的登陸認(rèn)證、web api接口調(diào)...
摘要:簡(jiǎn)介地址實(shí)際項(xiàng)目中的登陸認(rèn)證接口調(diào)用支付接口調(diào)用等場(chǎng)合經(jīng)常涉及到等算法。各大銀行接口中經(jīng)常使用算法對(duì)調(diào)用接口參數(shù)進(jìn)行簽名防篡改。使用端見端見特點(diǎn)便于理解,使用廣泛。這就使加密的計(jì)算量很大。對(duì)方收到信息后,用不同的密鑰解密并可核對(duì)信息摘要。 PHP-RSA簡(jiǎn)介 github 地址 https://github.com/lmxdawn/PH... 實(shí)際項(xiàng)目中的登陸認(rèn)證、web api接口調(diào)...
閱讀 2293·2021-11-15 11:37
閱讀 2962·2021-09-01 10:41
閱讀 797·2019-12-27 11:58
閱讀 753·2019-08-30 15:54
閱讀 719·2019-08-30 13:52
閱讀 2936·2019-08-29 12:22
閱讀 1080·2019-08-28 18:27
閱讀 1458·2019-08-26 18:42