天天看点

DES 加密、解密

<code>/* DES 加密、解密 */</code>

<code>/**</code>

<code> </code><code>* DES 加密</code>

<code> </code><code>* </code>

<code> </code><code>* @param data</code>

<code> </code><code>*            明文</code>

<code> </code><code>* @return</code>

<code> </code><code>* @throws Exception</code>

<code> </code><code>*/</code>

<code>public static String DESEncrypt(String data) throws Exception {</code>

<code>    </code><code>try {</code>

<code>        </code><code>// 生成一个可信任的随机数源</code>

<code>        </code><code>SecureRandom sr = new SecureRandom();</code>

<code>        </code><code>// 从原始密钥数据创建DESKeySpec对象</code>

<code>        </code><code>DESKeySpec dks = new DESKeySpec(KEY.getBytes());</code>

<code>        </code><code>// 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象</code>

<code>        </code><code>SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");</code>

<code>        </code><code>SecretKey securekey = keyFactory.generateSecret(dks);</code>

<code>        </code><code>// Cipher对象实际完成加密操作</code>

<code>        </code><code>Cipher cipher = Cipher.getInstance("DES");</code>

<code>        </code><code>// 用密钥初始化Cipher对象</code>

<code>        </code><code>cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);</code>

<code>        </code><code>// 加密数据</code>

<code>        </code><code>String strs = new BASE64Encoder().encodeBuffer(cipher.doFinal(data.getBytes()));</code>

<code>        </code><code>return strs;</code>

<code>    </code><code>} catch (Exception e) {</code>

<code>        </code><code>e.printStackTrace();</code>

<code>    </code><code>}</code>

<code>    </code><code>return null;</code>

<code>}</code>

<code> </code><code>* DES 解密</code>

<code> </code><code>*            密文</code>

<code> </code><code>* @return 明文</code>

<code>public</code> <code>static</code> <code>String DESDecrypt(String data) </code><code>throws</code> <code>Exception, Exception {</code>

<code>    </code><code>if</code> <code>(data == </code><code>null</code><code>)</code>

<code>        </code><code>return</code> <code>null</code><code>;</code>

<code>    </code><code>byte</code><code>[] buf = </code><code>new</code> <code>BASE64Decoder().decodeBuffer(data);</code>

<code>    </code><code>// 生成一个可信任的随机数源</code>

<code>    </code><code>SecureRandom sr = </code><code>new</code> <code>SecureRandom();</code>

<code>    </code><code>// 从原始密钥数据创建DESKeySpec对象</code>

<code>    </code><code>DESKeySpec dks = </code><code>new</code> <code>DESKeySpec(KEY.getBytes());</code>

<code>    </code><code>// 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象</code>

<code>    </code><code>SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(</code><code>"DES"</code><code>);</code>

<code>    </code><code>SecretKey securekey = keyFactory.generateSecret(dks);</code>

<code>    </code><code>// Cipher对象实际完成加密操作</code>

<code>    </code><code>Cipher cipher = Cipher.getInstance(</code><code>"DES"</code><code>);</code>

<code>    </code><code>// 用密钥初始化Cipher对象</code>

<code>    </code><code>cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);</code>

<code>    </code><code>return</code> <code>new</code> <code>String(cipher.doFinal(buf));</code>

上面代码在测试的时候,解密出现了乱码,

建议采用自己对base64进行编码格式控制,这样就能够保证加密,解密格式一致,不会出现乱码

      本文转自建波李 51CTO博客,原文链接:http://blog.51cto.com/jianboli/1902082,如需转载请自行联系原作者

继续阅读