天天看點

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,如需轉載請自行聯系原作者

繼續閱讀