iOS 使用 RSA/ECB/OAEPWithSHA-256AndMGF1Padding

先說結(jié)果

iOS這邊采用openssl+C語言方式實現(xiàn)了加密

即引入openssl庫,用C語言header實現(xiàn)方法交換(rsa.h中RSA_public_encrypt方法)

這里是求證過程:

1.通過openssl庫,iOS生成公鑰,通過RSA_PKCS1_PADDING,是可以與java實現(xiàn)互相解密的。

這里java主要代碼為:

Cipher ci = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding"); ci.init(Cipher.ENCRYPT_MODE, publicKey,new OAEPParameterSpec("SHA-256", "MGF1", new MGF1ParameterSpec("SHA-256"), PSource.PSpecified.DEFAULT));

2.找到j(luò)ava RSA中OAEPWithSHA-256AndMGF1Padding 和iOS RSA_PKCS1_OAEP_PADDING 區(qū)別

首先iOS 找不到mgf1 和 sha-256 關(guān)鍵字。我下載openssl最新的源碼(https://www.openssl.org/),在crypto/rsa/路徑下,找到了rsa_oaep.c


rsa.oaep.c

可見所有方法都是走到ossl_rsa_padding_padding_add_PKCS1_OAEP_mgf1_ex 方法中,在此方法中在md==NULL是采用的EVP_sha1()

這是否說明,openssl默認(rèn)都是sha1() , 如果我把這里方法換成sha_256() ,那么就滿足java的padding方式了。

3.怎么試:

下方鏈接2 ,是c語言中如何適配此種加密,并且說明了編譯過程。

當(dāng)我們調(diào)用openssl中RSA_public_encrypt方法時傳參,調(diào)用RSA_eay_public_encrypt,根據(jù)padding的int,選擇到RSA_padding_add_PKCS1_OAEP_mgf1。鏈接中說道替換方法,用SHA-256替換SHA1.openssl中有sha256,直接交換方法。

在IOS中使用c源碼,需要引用header,粘貼交換code


然后替換sha1


RSAFixed? header

最后放到工程中。

在加密時,由原來的RSA_public_encrypt 變成? RSA_public_encrypt_sha256

編譯成功后聯(lián)調(diào),通過 ~


源碼:有空再傳git

2022.1.17? mark?

RSADemo : https://gitee.com/zhangduck/RSADemo

參考鏈接:

OAEP 在openssl中的實現(xiàn)? 鏈接1

https://blog.csdn.net/github_35454460/article/details/51862470

c語言中RSA/ECB/OAEPWithSHA-256AndMGF1Padding的實現(xiàn) 鏈接2

https://developer.aliyun.com/article/693527


寫在最后:

1.? 首先我們產(chǎn)品至涉及到公鑰加密,后臺(JAVA)下方公鑰(PublicKey)的模(mod)和冪(Exp),移動端通過這兩個參數(shù)生成公鑰,對數(shù)據(jù)加密。

2.了解雙端區(qū)別,哪天來個其他的padding方式都能通過這種方式解決。


mark:


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容