知识大全 漫谈Java加密技术(二)

Posted

篇首语:年轻不是用来放纵的理由而是奋斗的资本!本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 漫谈Java加密技术(二)相关的知识,希望对你有一定的参考价值。

漫谈Java加密技术(二)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  接下来我们介绍对称加密算法 最常用的莫过于DES数据加密算法

  DES

  DES Data Encryption Standard 即数据加密算法 是IBM公司于 年研究成功并公开发表的 DES算法的入口参数有三个 Key Data Mode 其中Key为 个字节共 位 是DES算法的工作密钥 Data也为 个字节 位 是要被加密或被解密的数据 Mode为DES的工作方式 有两种 加密或解密

  DES算法把 位的明文输入块变为 位的密文输出块 它所使用的密钥也是 位

  通过java代码实现如下

   import java security Key;   import java security SecureRandom;     import javax crypto Cipher;   import javax crypto KeyGenerator;   import javax crypto SecretKey;   import javax crypto SecretKeyFactory;   import javax crypto spec DESKeySpec;       /** *//**   * DES安全编码组件  author by ; *    * <pre>   * 支持 DES DESede(TripleDES 就是 DES) AES Blowfish RC RC (ARCFOUR)   * DES                  key size must be equal to     * DESede(TripleDES)    key size must be equal to   or     * AES                  key size must be equal to     or  but   and   bits may not be available   * Blowfish             key size must be multiple of   and can only range from   to   (inclusive)   * RC                   key size must be beeen   and   bits   * RC (ARCFOUR)         key size must be beeen   and   bits   * 具体内容 需要关注 JDK Document&///docs/technotes/guides/security/l   * </pre>   *    * @author 梁栋   * @version     * @since     */  public abstract class DESCoder extends Coder        /** *//**       * ALGORITHM 算法 <br>       * 可替换为以下任意一种算法 同时key值的size相应改变        *        * <pre>       * DES                  key size must be equal to         * DESede(TripleDES)    key size must be equal to   or         * AES                  key size must be equal to     or  but   and   bits may not be available       * Blowfish             key size must be multiple of   and can only range from   to   (inclusive)       * RC                   key size must be beeen   and   bits       * RC (ARCFOUR)         key size must be beeen   and   bits       * </pre>       *        * 在Key toKey(byte[] key)方法中使用下述代码       * <code>SecretKey secretKey = new SecretKeySpec(key  ALGORITHM);</code> 替换       * <code>       * DESKeySpec dks = new DESKeySpec(key);       * SecretKeyFactory keyFactory = SecretKeyFactory getInstance(ALGORITHM);       * SecretKey secretKey = keyFactory generateSecret(dks);       * </code>       */      public static final String ALGORITHM =  DES ;         /** *//**       * 转换密钥<br>       *        * @param key       * @return       * @throws Exception       */      private static Key toKey(byte[] key) throws Exception            DESKeySpec dks = new DESKeySpec(key);           SecretKeyFactory keyFactory = SecretKeyFactory getInstance(ALGORITHM);           SecretKey secretKey = keyFactory generateSecret(dks);             // 当使用其他对称加密算法时 如AES Blowfish等算法时 用下述代码替换上述三行代码           // SecretKey secretKey = new SecretKeySpec(key  ALGORITHM);             return secretKey;                /** *//**       * 解密       *        * @param data       * @param key       * @return       * @throws Exception       */      public static byte[] decrypt(byte[] data  String key) throws Exception            Key k = toKey(decryptBASE (key));             Cipher cipher = Cipher getInstance(ALGORITHM);           cipher init(Cipher DECRYPT_MODE  k);             return cipher doFinal(data);                /** *//**       * 加密       *        * @param data       * @param key       * @return       * @throws Exception       */      public static byte[] encrypt(byte[] data  String key) throws Exception            Key k = toKey(decryptBASE (key));           Cipher cipher = Cipher getInstance(ALGORITHM);           cipher init(Cipher ENCRYPT_MODE  k);             return cipher doFinal(data);                /** *//**       * 生成密钥       *        * @return       * @throws Exception       */      public static String initKey() throws Exception            return initKey(null);                /** *//**       * 生成密钥       *        * @param seed       * @return       * @throws Exception       */      public static String initKey(String seed) throws Exception            SecureRandom secureRandom = null;             if (seed != null)                secureRandom = new SecureRandom(decryptBASE (seed));            else                secureRandom = new SecureRandom();                        KeyGenerator kg = KeyGenerator getInstance(ALGORITHM);           kg init(secureRandom);             SecretKey secretKey = kg generateKey();             return encryptBASE (secretKey getEncoded());          

  延续上一个类的实现 我们通过MD 以及SHA对字符串加密生成密钥 这是比较常见的密钥生成方式

  再给出一个测试类

   import static  junit Assert *;     import  junit Test;     /** *//**   *    * @author by ;; * @version     * @since     */  public class DESCoderTest          @Test      public void test() throws Exception            String inputStr =  DES ;           String key = DESCoder initKey();           System err println( 原文:\\t  + inputStr);             System err println( 密钥:\\t  + key);             byte[] inputData = inputStr getBytes();           inputData = DESCoder encrypt(inputData  key);             System err println( 加密后:\\t  + DESCoder encryptBASE (inputData));             byte[] outputData = DESCoder decrypt(inputData  key);           String outputStr = new String(outputData);             System err println( 解密后:\\t  + outputStr);             assertEquals(inputStr  outputStr);          

  得到的输出内容如下

  原文 DES

  密钥 f wEtRrV q =

  加密后     C qe oNIzRY=

  解密后     DES

  由控制台得到的输出 我们能够比对加密 解密后结果一致 这是一种简单的加密解密方式 只有一个密钥

  其实DES有很多同胞兄弟 如DESede(TripleDES) AES Blowfish RC RC (ARCFOUR) 这里就不过多阐述了 大同小异 只要换掉ALGORITHM换成对应的值 同时做一个代码替换SecretKey secretKey = new SecretKeySpec(key ALGORITHM) 就可以了 此外就是密钥长度不同了

  /**

cha138/Article/program/Java/gj/201311/27624

相关参考

知识大全 漫谈Java加密技术系列文章 一至十

漫谈Java加密技术系列文章一至十  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  漫谈Java加

知识大全 Java加密技术(九)

Java加密技术(九)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在Java加密技术(八)中

知识大全 谈谈Java加密技术(七)

谈谈Java加密技术(七)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ECC  ECCEll

知识大全 谈谈Java加密技术(六)

谈谈Java加密技术(六)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  接下来我们介绍DSA数

知识大全 Java技术进阶 基于Java的IDEA加密算法探讨

Java技术进阶基于Java的IDEA加密算法探讨  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 深入讨论JAVA字节码加密技术(2)

深入讨论JAVA字节码加密技术(2)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这个累加载器

知识大全 深入讨论JAVA字节码加密技术(1)

深入讨论JAVA字节码加密技术(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  如果把的cl

知识大全 论Java加密技术与Windows的结合

论Java加密技术与Windows的结合  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  论Jav

知识大全 漫谈Java程序的性能优化

漫谈Java程序的性能优化  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java使得复杂应用的

知识大全 漫谈Java平台上的CRM系统

漫谈Java平台上的CRM系统  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  概要  本文介绍了