RAS加密解密抛错,javax.crypto.BadPaddingException: Data must start with zero

立志尚早 发布于 2013/10/23 09:16
阅读 13K+
收藏 1

写了个Rsa加密解密文件的例子,代码如下:

public class Test {
	public static void main(String[] args) throws Exception {
		
		Map<String,Object> keys = RSACoder.initKey();
		String publicKey = RSACoder.getPublicKey(keys);
		String privateKey = RSACoder.getPrivateKey(keys);
              File file = new File("C:\\Users\\Jialy\\Desktop\\哇撒比.docx");
		InputStream is = new FileInputStream(file);
		byte[] buffer = new byte[1024];
		int length = 0;
		byte[] data = new byte[]{};
		while((length=is.read(buffer))>0){
			data = ArrayUtils.addAll(data, buffer);
		}
		is.close();
		byte[] encryptData = new byte[]{};
        for(int i=0;i<data.length;i+=100){
        	byte[] subData = ArrayUtils.subarray(data, i, i+100);
        	byte[] encryptingData = RSACoder.encryptByPrivateKey(subData, privateKey);
        	encryptData = ArrayUtils.addAll(encryptData, encryptingData);
        }
		System.out.println(encryptData.toString()); 
		
		byte[] decryptData = new byte[]{};
		for(int i=0;i<encryptData.length;i+=120){
			byte[] subData = ArrayUtils.subarray(encryptData, i, i+120);
			byte[] decryptingData = RSACoder.decryptByPublicKey(subData, publicKey);//公钥解密
			decryptData = ArrayUtils.addAll(decryptData, decryptingData);
		}
		System.out.println(new String(decryptData));
	}
}
总是抛出如下错误

网上关于这个错误的资料真的很少,有没有会的大神,求指教!
加载中
0
立志尚早
立志尚早

就没个能回答的人吗?!.弄了半天自己解决了,跟编码格式有关,utf-8格式的一个字符占三个字节,所以对字节流分段加密的时候,i的增量必须是3的倍数。

还有关于,造成Data must start with zero 这种错误不仅仅只有这种原因,具体情况具体对待。

获取文件内容的处理小更改:

以前:

更改后为:

返回顶部
顶部