背景:andorid客户端用私钥对内容进行加密,webservice接收后用对应的公钥进行解密。但是一直报javax.crypto.BadPaddingException: Blocktype mismatch: 0错误。
在调试过程中发现,虽然密钥是一样的,但是加密后的内容就出现了不同。但是分别在服务端和客户端加解密都正常。而且客户端和服务端的加密算法的实现也是一模一样的。
实在找不出原因。google、百度了一番,才知道可能是加密过程中填充字符长度不一样导致,这跟加解密指定的RSA算法有关。
cipher = Cipher.getInstance("RSA");
算法实现中我都如上所写,后来改成
cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
就正确了。
只能推测出,android跟webservice两边默认的RSA算法不一样导致。
本人菜鸟一枚,可能理解的不正确,记录只怕自己遗忘。如果有高手看到,请帮忙指正。