﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-hmsxq-随笔分类-加密解密</title><link>http://www.blogjava.net/hmsxq/category/21068.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 29 Mar 2007 01:14:07 GMT</lastBuildDate><pubDate>Thu, 29 Mar 2007 01:14:07 GMT</pubDate><ttl>60</ttl><item><title>DES算法简单例程</title><link>http://www.blogjava.net/hmsxq/archive/2007/03/28/106929.html</link><dc:creator>黑马_2046</dc:creator><author>黑马_2046</author><pubDate>Wed, 28 Mar 2007 05:17:00 GMT</pubDate><guid>http://www.blogjava.net/hmsxq/archive/2007/03/28/106929.html</guid><wfw:comment>http://www.blogjava.net/hmsxq/comments/106929.html</wfw:comment><comments>http://www.blogjava.net/hmsxq/archive/2007/03/28/106929.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hmsxq/comments/commentRss/106929.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hmsxq/services/trackbacks/106929.html</trackback:ping><description><![CDATA[
		<font size="2">
				<strong>2．4 DES算法简介<br /></strong>DES即分组加密算法，明文密文都使用64位数据分组；采用对称算法，加密和解密算法相同，但是使用的密钥不同，密钥使用56位数；由于算法只使用了简单的数据逻辑和算术运算，所以实现起来相对简单。本文就使用DES算法来给出一个加解密工具类。<br /><strong>3.java 实现的对字符串加解密工具类<br /><span id="Codehighlighter1_240_2823_Open_Text"><span id="Codehighlighter1_419_2823_Open_Text"><span id="Codehighlighter1_439_2823_Open_Text"><pre>import java.io.*;<br />import javax.crypto.*;<br />import javax.crypto.spec.*;<br />import java.security.*;<br />import java.security.spec.*;<br />import com.sun.crypto.provider.SunJCE;<br />import java.io.Serializable;<br /><br />/**<br /> * 提供加密算法，可以对输入的字符串进行加密、解密操作<br />*/<br />public class EncryptData<br />{<br />    byte[] encryptKey;<br />    DESedeKeySpec spec;<br />    SecretKeyFactory keyFactory;<br />    SecretKey theKey;<br />    Cipher cipher;<br />    IvParameterSpec IvParameters;<br /><br />    public  EncryptData()<br />    {<br />        try<br />        {<br />            // 检测是否有 TripleDES 加密的供应程序<br />            // 如无，明确地安装SunJCE 供应程序<br />            try{ Cipher c = Cipher.getInstance("DESede"); }<br />            catch (Exception e)<br />            {<br />                System.err.println("Installling SunJCE provider.");<br />                Provider sunjce = new com.sun.crypto.provider.SunJCE();<br />                Security.addProvider(sunjce);<br />            }<br />            // 创建一个密钥<br />            encryptKey = "This is a test DESede Key".getBytes();<br /><br />            // 为上一密钥创建一个指定的 DESSede key<br />            spec = new DESedeKeySpec(encryptKey);<br /><br />            // 得到 DESSede keys<br />            keyFactory = SecretKeyFactory.getInstance("DESede");<br /><br />            // 生成一个 DESede 密钥对象<br />            theKey = keyFactory.generateSecret(spec);<br /><br />            // 创建一个 DESede 密码<br />            cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");<br /><br />            // 为 CBC 模式创建一个用于初始化的 vector 对象<br />            IvParameters =<br />                    new IvParameterSpec(new byte[]{12,34,56,78,90,87,65,43} );<br />        }<br />        catch (Exception exc)<br />        {<br />            // 记录加密或解密操作错误<br />        }<br />    }<br /><br />    /**<br />     * 加密算法<br />     * @param password  等待加密的密码<br />     * @return          加密以后的密码<br />     * @throws Exception<br />     */<br />    public byte[] encrypt(String password)<br />    {<br />        String encrypted_password = null;<br />        byte[] encrypted_pwd = null;<br /><br />        try<br />        {<br />            // 以加密模式初始化密钥<br />            cipher.init(Cipher.ENCRYPT_MODE,theKey,IvParameters);<br /><br />            // 加密前的密码（旧）<br />            byte[] plainttext = password.getBytes();<br /><br />            // 加密密码<br />            encrypted_pwd = cipher.doFinal(plainttext);<br /><br />            // 转成字符串，得到加密后的密码（新）<br />            encrypted_password = new String(encrypted_pwd);<br />        }<br />        catch(Exception ex)<br />        {<br />            // 记录加密错误<br />        }<br />        return encrypted_pwd;<br />    }<br /><br />    /**<br />     * 解密算法<br />     * @param password  加过密的密码<br />     * @return          解密后的密码<br />     */<br />    public String decrypt(byte[] password)<br />    {<br />        String decrypted_password = null;<br />        try<br />        {<br />            // 以解密模式初始化密钥<br />            cipher.init(Cipher.DECRYPT_MODE,theKey,IvParameters);<br /><br />            // 构造解密前的密码<br />            byte[] decryptedPassword = password;<br /><br />            // 解密密码<br />            byte[] decrypted_pwd = cipher.doFinal(decryptedPassword);<br />            // 得到结果<br />            decrypted_password = new String(decrypted_pwd);<br />        }<br />        catch(Exception ex)<br />        {<br />            // 记录解密错误<br />        }<br />        return decrypted_password;<br />    }<br />}</pre></span></span></span></strong></font>
<img src ="http://www.blogjava.net/hmsxq/aggbug/106929.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hmsxq/" target="_blank">黑马_2046</a> 2007-03-28 13:17 <a href="http://www.blogjava.net/hmsxq/archive/2007/03/28/106929.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>