输入流加密

时间:2015-07-22 19:30:51

标签: java encryption cryptography twofish

我正努力让加密程序运行,因为我试图使用Twofish。有没有办法在不同的包中使用cipherinputstream或cipheroutputstream算法?或者将Twofish算法放入java.crypto.cipher的方法?或者有更好的方法吗?

1 个答案:

答案 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。