很久没写帖子了,以前的帖子在简书,因为众所周知的原因也不打算在简书继续写帖子了,简书个人主页:www.jianshu.com/u/bbb104e9c…
问题
后端使用RSA+AES加密方案,要是客户端使用PKCS#1_OAEP with SHA256的模式来加解密数据。
之前只弄过国密没弄过RSA+AES,就网上看帖子找了大家都说好的三方库SwiftRSA,结果调试时后端怎么也解不开客户端上传的加密数据。
原因
SwiftyRSA库中使用的padding是SecPadding, 然而SecPadding中已写明iOS15之后废弃使用,让用 SecKeyAlgorithm,然后SwiftyRSA中使用的加解密方法 SecKeyEncrypt,也是同步废弃,让使用 SecKeyCreateEncryptedData。
SwiftyRSA这个库6个月前还有更新,但是issue中有人提出OAEP_SHA256的问题至今没有解决,看来作者是不打算解决了。
解决方案
后端语言是用的Python,其中的pythoncryptodemo库使用PKCS1_OAEP时,默认就是SHA1, SwiftyRSA中使用.OAEP模式,默认也是SHA1。
这个嘛,本着能不改就不改的原则,我把后端改成SHA1就行了,前后端已通。
建议
如果非得用SHA256或者其他模式,那么就还是手动把SwiftyRSA改一下,里面的SecKeyEncrypt换成SecKeyCreateEncryptedData。
\color {Gary}{另:SwiftyRSA 和 pythoncryptodemo 生成秘钥的时候,默认都是使用PKCS#1格式的秘钥,但Java好像是PKCS#7还是8来着,然后要是闲时间,直接研究Openssl吧,脱发来得更陡}