gpt4 book ai didi

java - 我可以只解密使用 Java 中的 AES/CBC 加密的文件的一部分吗?

转载 作者:行者123 更新时间:2023-11-29 08:30:20 24 4
gpt4 key购买 nike

我该怎么做?我有使用 Java 中的 AES/CBC/PKCS5Padding 加密文件的代码,据我所知,这是这张图片:enter image description here

部分解密应该是可能的,因为前面的 block 和 key 使用了部分密文。不过,我还没有找到任何这样的例子。有帮助吗?

解密代码如下:

    //skip the IV (ivSize is 16 here) - IV was pretended to the stream during encryption
data.skip(ivSize);
//skip n blocks
int n = 2;
System.out.println("skipped: " + data.skip(n*16));

byte[] iv = new byte[ivSize];
//use next 16 bytes as IV
data.read(iv);

// Hashing key.
MessageDigest digest = MessageDigest.getInstance("SHA-256");
digest.update(encryptionKey.getBytes(StandardCharsets.UTF_8));
byte[] keyBytes = new byte[16];
System.arraycopy(digest.digest(), 0, keyBytes, 0, keyBytes.length);

Cipher cipher;
try {
cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(iv);
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
} catch (GeneralSecurityException e) {
throw new IOException(e);
}

CipherInputStream cis = new CipherInputStream(data, cipher);
try {
ByteStreams.copy(ByteStreams.limit(cis, limit), output);
} catch (IOException exception) {
// starting with java 8 the JVM wraps an IOException around a GeneralSecurityException
// it should be safe to swallow a GeneralSecurityException
if (!(exception.getCause() instanceof GeneralSecurityException)) {
throw exception;
}
log.warning(exception.getMessage());
} finally {
cis.close();
}

最佳答案

是的,这是可能的。

您需要选择 block 边界上的“部分”,长度是 block 大小的倍数,并使用前一个 block 作为 IV。对于 AES, block 大小为 16 字节。

如果“部分”包括最后一个 block ,请指定正确的填充,否则指定无填充 NoPadding:AES/CBC/NoPadding 在本例中。这将消除填充错误。只有最后一个 block 有/是填充。

Cipher 必须使用正确的填充选项实例化,具体取决于它是否是整个加密数据的最后一个 block 。

参见:PKCS#7 padding (有时错误地称为 PKCS#5)这是最常见的填充。

关于java - 我可以只解密使用 Java 中的 AES/CBC 加密的文件的一部分吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48830368/

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