gpt4 book ai didi

java - 如何去掉 PKCS7Padding 中的零

转载 作者:太空宇宙 更新时间:2023-11-04 07:34:28 24 4
gpt4 key购买 nike

我正在尝试从填充中删除零。我想删除零而不必使用 for 循环,那么如何从填充中删除零?

这是 SymmetricPaddingExample.java 代码:

import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
public class SimpleSymmetricPaddingExample{

public static void main(String[] args) throws Exception{
String s = "HelloWorld";
byte[] input = s.getBytes();

byte[] keyBytes = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e, 0x0f,
0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17};

Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC");

SecretKeySpec key = new SecretKeySpec(keyBytes, "AES");

System.out.println("input: " + new String(input));

//encryption
cipher.init(Cipher.ENCRYPT_MODE, key);

byte[] cipherText = new byte[cipher.getOutputSize(input.length)];

int ctLength = cipher.update(input, 0 , input.length, cipherText, 0);

ctLength += cipher.doFinal(cipherText, ctLength);

System.out.println("encrypted: " + new String(cipherText));

//Decryption
cipher.init(Cipher.DECRYPT_MODE, key);

byte[] plainText = new byte[cipher.getOutputSize(cipherText.length)];

int ptLength = cipher.update(cipherText, 0, ctLength, plainText, 0);

ptLength += cipher.doFinal(plainText, ptLength);
System.out.println("decrypted: " + new String(plainText));
}

}

最佳答案

PKCS7 填充不添加零。它添加了 0x010x02020x030303 等。在您看到填充之前,解密方法将自动删除填充。

您的额外零似乎是输出数组末尾留下的额外字节。您的密文长度将包括填充的长度,该填充将在解密过程中自动删除。解密的明文只会部分填充您的 plainText[] 数组,在末尾留下零字节。如果正确调整数组大小,附加的零将会消失。

关于java - 如何去掉 PKCS7Padding 中的零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17153381/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com