美文网首页iOS功能开发iOS填坑指南
iOS 使用 RSA/ECB/OAEPWithSHA-256A

iOS 使用 RSA/ECB/OAEPWithSHA-256A

作者: 闪现接Q | 来源:发表于2021-09-02 13:58 被阅读0次

先说结果

iOS这边采用openssl+C语言方式实现了加密

即引入openssl库,用C语言header实现方法交换(rsa.h中RSA_public_encrypt方法)

这里是求证过程:

1.通过openssl库,iOS生成公钥,通过RSA_PKCS1_PADDING,是可以与java实现互相解密的。

这里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.找到java RSA中OAEPWithSHA-256AndMGF1Padding 和iOS RSA_PKCS1_OAEP_PADDING 区别

首先iOS 找不到mgf1 和 sha-256 关键字。我下载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默认都是sha1() , 如果我把这里方法换成sha_256() ,那么就满足java的padding方式了。

3.怎么试:

下方链接2 ,是c语言中如何适配此种加密,并且说明了编译过程。

当我们调用openssl中RSA_public_encrypt方法时传参,调用RSA_eay_public_encrypt,根据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

编译成功后联调,通过 ~

源码:有空再传git

2022.1.17  mark 

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

参考链接:

OAEP 在openssl中的实现  链接1

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

c语言中RSA/ECB/OAEPWithSHA-256AndMGF1Padding的实现 链接2

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

写在最后:

1.  首先我们产品至涉及到公钥加密,后台(JAVA)下方公钥(PublicKey)的模(mod)和幂(Exp),移动端通过这两个参数生成公钥,对数据加密。

2.了解双端区别,哪天来个其他的padding方式都能通过这种方式解决。

mark:

相关文章

网友评论

    本文标题:iOS 使用 RSA/ECB/OAEPWithSHA-256A

    本文链接:https://www.haomeiwen.com/subject/hafyultx.html