看一下这两个类 CipherOutputStream 和 CipherInputStream掌握这两个类之前,需要了解 Cipher 这个类,以及 JCE 的工作方式。要处理文件加密的话,需要使用对称加密算法中的流加密算法,当然了,使用块加密算法也行。常见的流加密算法有:RC4
常见的块加密算法有:DES、3DES、AES、Blowfish 等等MD5 肯定是不能加密文件的,MD5 是消息摘要,只能对文件内容进行摘要,看看这个文件是否被改动过。密码学主要分为:对称加密算法、非对称加密算法(公钥密码学)、消息摘要、消息认证码(MAC)、数字签名这些在 Java 中都能支持。

解决方案 »

  1.   

    DES加密出来的密文长度是一样的吗?
      

  2.   


    不一样,一般来说是 8 个字节的倍数。DES 是分组密码,除了几种加密模式(CTR)之外其他长度均为 8 个字节的倍,而 CTR 的密文跟原文的字节数是一致的。使用 CTR 加密模式 DES 转变成为了流密码。流密码与分组密码的区别在于:流密码的密文字节长度与原文字节长度是一致的。一般分组密码需要指定填充模式,将未满分组长度的字节进行填充。如果不指定填充模式,则原文字节长度必须是分组的长度。使用填充算法后,分组密码的密文长度都是分组长度的倍数。密文长度为:[(P/B) + 1] * BP -- 原文字节长度
    B -- 分组长度
    / -- 整数
      

  3.   

    Sun JCE 对称加密算法主要有以下几种:DES、3DES、Blowfish、RC2 等是分组密码,分组长度为 8 个字节(64 位)
    AES 也是分组密码,分组长度为 16 个字节(128 位)
    RC4、ARCFOUR 是流密码