在日常工作中,需要服务器端暴露多个api接口供给移动端(ios,android)调用.
在使用过程中发现,ios端的加密发送到服务器端解密正常,但是android的加密数据服务器端会出现异常.
抛出“javax.crypto.BadPaddingException: Blocktype”异常
原解密方法
Cipher cipher = Cipher.getInstance("RSA");
根据网上的方法使用而不能使用跟ios端一样的解密方法
Cipher cipher = Cipher.getInstance("RSA",new BouncyCastleProvider());
进行解密,发现解密耗时过长.
经过查询发现,出现出现这样的问题是由于android和java的rsa加密填充方式不同导致.
问题原因已经找到,在网上找寻了很多方法,经过测试发现只需要调整一下android端的加密的填充方式即可
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
服务端可以直接使用
Cipher cipher = Cipher.getInstance("RSA");
即可.