我正努力让加密程序运行,因为我试图使用Twofish。有没有办法在不同的包中使用cipherinputstream或cipheroutputstream算法?或者将Twofish算法放入java.crypto.cipher的方法?或者有更好的方法吗?
答案 0 :(得分:0)
Java本身没有两个实现,因此您需要使用具有一个的加密(JCA / JCE)提供程序,例如Bouncy Castle:
public class TwofishInStreams {
public static void main(String[] args) throws Exception {
Security.addProvider(new BouncyCastleProvider());
Cipher twofish = Cipher.getInstance("twofish/cbc/pkcs5padding");
SecretKey twoFishKey = new SecretKeySpec(new byte[16], "twofish");
IvParameterSpec iv = new IvParameterSpec(new byte[16]);
twofish.init(Cipher.ENCRYPT_MODE, twoFishKey, iv);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try (CipherOutputStream cos = new CipherOutputStream(baos, twofish)) {
cos.write("owlstead".getBytes(StandardCharsets.UTF_8));
}
System.out.println(Hex.toHexString(baos.toByteArray()));
}
}
请阅读Bouncy Castle有关如何使用提供程序的文档,不要忘记安装Oracle提供的无限加密文件。
显然这只是一个例子:你不应该像这样使用零字节密钥或零字节IV。