gpt4 book ai didi

java - 使用 CipherOutputStream + AES 将字符串写入文件

转载 作者:行者123 更新时间:2023-12-01 16:34:49 34 4
gpt4 key购买 nike

我正在寻找一种方法,在给定任意大小的密码的情况下,使用 AES 加密我通过流接收的文件。为了让事情更容易开始,我试图将一些加密消息写入文件。但我遇到了麻烦:

  1. 我希望能够定义任意大小的密码。是否可以以“标准”形式完成它,或者我必须将密码填充到 2^k 大小?我目前正在通过提供临时“aaaaaaaaaaaaaaaa”密码来规避该问题,但我想尽快摆脱它。
  2. 如果我尝试向 cos 写入一个长字符串,加密的内容将被写入该文件。但如果我尝试更小的东西,如“abc”,则什么也不会写。我尝试过几种填充选项,但它们似乎没有用(PKCS5Padding、SSL3Padding、NoPadding)。

这是我正在使用的代码:

    SecretKeySpec localSecretKeySpec = new SecretKeySpec("aaaaaaaaaaaaaaaa".getBytes(), "AES");
Cipher localCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
localCipher.init(Cipher.ENCRYPT_MODE, localSecretKeySpec);

CipherOutputStream cos = new CipherOutputStream(new FileOutputStream("abc"), localCipher);
IOUtils.write("abc", cos);
cos.flush();

最佳答案

This answer演示如何使用 SecretKeyFactory 根据任意长度密码生成 key 。

至于你的第二个问题,cos.flush()不足以填充和加密最后一个 block 。您需要为此调用cos.close()Here close() 方法的文档说明了这一事实。

关于java - 使用 CipherOutputStream + AES 将字符串写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10341150/

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