gpt4 book ai didi

Java CipherOutputStream 不返回所有字节

转载 作者:行者123 更新时间:2023-12-02 06:06:48 25 4
gpt4 key购买 nike

我是密码学新手,但我计划在以后的一些应用程序中使用它。

我想知道我制作的这个简短的演示程序中是否缺少某些组件。

我知道我正在用 300 字节进行假设,如果有办法绕过我想知道的猜测数组大小,

import java.io.*;
import java.security.GeneralSecurityException;
import java.security.spec.KeySpec;
import java.util.Arrays;


import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;

public class CipherStreamDemo {
private static final byte[] salt={
(byte)0xC9, (byte)0xEF, (byte)0x7D, (byte)0xFA,
(byte)0xBA, (byte)0xDD, (byte)0x24, (byte)0xA9
};
private Cipher cipher;
private final SecretKey key;
public CipherStreamDemo() throws GeneralSecurityException, IOException{
SecretKeyFactory kf=SecretKeyFactory.getInstance("DES");
KeySpec spec=new DESKeySpec(salt);
key=kf.generateSecret(spec);
cipher=Cipher.getInstance("DES");
}
public void encrypt(byte[] buf) throws IOException, GeneralSecurityException{
cipher.init(Cipher.ENCRYPT_MODE,key);
OutputStream out=new CipherOutputStream(new FileOutputStream("crypt.dat"), cipher);
out.write(buf);
out.close();
}
public byte[] decrypt() throws IOException, GeneralSecurityException{
cipher.init(Cipher.DECRYPT_MODE, key);
InputStream in=new CipherInputStream(new FileInputStream("crypt.dat"), cipher);
byte[] buf=new byte[300];
int bytes=in.read(buf);
buf=Arrays.copyOf(buf, bytes);
in.close();
return buf;
}
public static void main(String[] args) {
try{
CipherStreamDemo csd=new CipherStreamDemo();
String pass="thisisasecretpassword";
csd.encrypt(pass.getBytes());
System.out.println(new String(csd.decrypt()));
}catch(Exception e){
e.printStackTrace();
}
}
}
//Output: thisisasecretpass

最佳答案

您假设输入恰好为 300 字节,并且您还假设您已在一次读取中读取了全部内容。您需要继续阅读,直到 read() 返回 -1。

我在对象流中没有看到任何点。他们只是增加了开销。删除它们。

关于Java CipherOutputStream 不返回所有字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22213483/

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