美文网首页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