问题描述是:加密了一个字符串,去调用方法,返回来一个加密的字符串,然后,去解密,再返回一个字符串,可是,现在解密的过程中,就报错如下:不知有相同经历的,可否告知。或者讨论下。
报错为:javax.crypto.BadPaddingException: unknown block type片段代码如下:
byte enc_ascii[] = tobeDecrypted.getBytes(this.chartset);byte decrypted[] = new byte[enc_ascii.length / 2];ascii2Hex(enc_ascii.length, enc_ascii, decrypted);byte decryptout[]=pri.doFinal(decrypted);//这里出错

解决方案 »

  1.   

    对于RSA的加密与解密,一般是要求数据长度与密钥长度对齐的。
    比如,1024位的密钥长度,输入的加密解密长度为128字节。
    加密时,若长度未达到128字节,需要按时PKCS1标准来填充数据,使其长度达到128字节。
    解密时,解密接口(若使用JDK的话也是一样)将自动按PKCS1去掉填充的数据,还原明文。你的异常可能是数据填充方面的问题。
      

  2.   


    您好,那如果是数据填充的问题,还应该怎么修改?是修改加密之前的字符串数据吗?因为是一串字符串传入加密方法进行加密,我打印,传入的字符串为89字节,加密后,就变成256字节的密文了,然后转换成string类型,去调用服务端方法里面,然后方法再返回一个字符串密文。再进行解密,此时,这个密文打印也是256字节,然后再进行解密方法,发现是去转换成一个128字节的数据,再传入doFinal(byte[] in)方法里,就是在这个byte decryptout[]=cipher.doFinal(decrypted)方法出错了。报unknown block type的问题?