对称密码的编程使用(DES、3DES、AES)

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zwx19921215/article/details/61635749

对称密码的概念

  • 加密密钥和解密密钥相同,对于大多数对称密码算法,加解密过程互逆
  • 加解密通信模型


  • 特点:算法公开、计算量小、加密速度快、加密效率高
  • 弱点:双方都使用同样密钥,安全性得不到保证

DES 算法的编程使用密钥偏短(56位)、生命周期短

package com.crypt.des;

import com.crypt.ByteToHexUtil;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

/**
 * des加密
 * Created by zhangweixiang on 4/17/2016.
 */
public class DESUtil {

    /**
     * 生成desckey
     * @param type
     * @return
     * @throws Exception
     */
    public static byte[] generateKey(String type) throws Exception {
        KeyGenerator keyGenerator = KeyGenerator.getInstance(type);
        keyGenerator.init(56);
        SecretKey secretKey = keyGenerator.generateKey();
        return  secretKey.getEncoded();
    }

    /**
     * 通过指定的deskey加密
     * @param data 加密的数据
     * @param key 秘钥
     * @param type 加密方式
     * @return 加密信息
     * @throws Exception
     */
    public static byte[] encrypt(byte[] data,byte[] key,String type) throws Exception {
        SecretKey secretKey = new SecretKeySpec(key,type);
        Cipher cipher = Cipher.getInstance(type);
        cipher.init(Cipher.ENCRYPT_MODE,secretKey);
        return cipher.doFinal(data);
    }

    /**
     * des解密
     * @param data 需要解密的数据
     * @param key 解密秘钥
     * @param type 类型
     * @return 解密后的结果
     * @throws Exception
     */
    public static byte[] decrypt(byte[] data,byte[] key,String type) throws Exception {
        SecretKey secretKey = new SecretKeySpec(key,type);
        Cipher cipher = Cipher.getInstance(type);
        cipher.init(Cipher.DECRYPT_MODE,secretKey);
        return cipher.doFinal(data);
    }

    public static void main(String[] args) throws Exception {
        String data = "test desc";
        String type = "DES";// DES/ECB/PKCS5Padding
        byte[] key = DESUtil.generateKey(type);
        byte[] encData = DESUtil.encrypt(data.getBytes(),key,type);
        String encDataStr = ByteToHexUtil.bytesToHexString(encData);
        System.out.println(data+">>des encrypt>>"+encDataStr);

        byte[] decData = DESUtil.decrypt(encData,key,type);
        System.out.println(encDataStr+">>des decrypt>>"+new String(decData));
    }
}

3DES 算法的编程使用

将密钥长度增至112位或168位,通过增加迭代次数提高安全性

缺点:处理速度较慢、密钥计算时间较长、加密效率不高

package com.crypt.des;

import com.crypt.ByteToHexUtil;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

/**
 * 3des加密
 * Created by zhangweixiang on 4/17/2016.
 */
public class TripleDESUtils {

    /**
     * 生成3desckey
     * @param type
     * @return
     * @throws Exception
     */
    public static byte[] generateKey(String type) throws Exception {
        KeyGenerator keyGenerator = KeyGenerator.getInstance(type);
        keyGenerator.init(112);//128 168
        SecretKey secretKey = keyGenerator.generateKey();
        return  secretKey.getEncoded();
    }

    /**
     * 通过指定的3deskey加密
     * @param data 加密的数据
     * @param key 秘钥
     * @param type 加密方式
     * @return 加密信息
     * @throws Exception
     */
    public static byte[] encrypt(byte[] data,byte[] key,String type) throws Exception {
        SecretKey secretKey = new SecretKeySpec(key,type);
        Cipher cipher = Cipher.getInstance(type);
        cipher.init(Cipher.ENCRYPT_MODE,secretKey);
        return cipher.doFinal(data);
    }

    /**
     * 3des解密
     * @param data 需要解密的数据
     * @param key 解密秘钥
     * @param type 类型
     * @return 解密后的结果
     * @throws Exception
     */
    public static byte[] decrypt(byte[] data,byte[] key,String type) throws Exception {
        SecretKey secretKey = new SecretKeySpec(key,type);
        Cipher cipher = Cipher.getInstance(type);
        cipher.init(Cipher.DECRYPT_MODE,secretKey);
        return cipher.doFinal(data);
    }

    public static void main(String[] args) throws Exception {
        String data = "test desc";
        String type = "DESede";// DES/ECB/PKCS5Padding
        byte[] key = TripleDESUtils.generateKey(type);
        byte[] encData = TripleDESUtils.encrypt(data.getBytes(),key,type);
        String encDataStr = ByteToHexUtil.bytesToHexString(encData);
        System.out.println(data+">>3des encrypt>>"+encDataStr);

        byte[] decData = TripleDESUtils.decrypt(encData,key,type);
        System.out.println(encDataStr+">>3des decrypt>>"+new String(decData));
    }
}

AES 算法的编程使用

1.AES:高级数据加密标准,能够有效抵御已知的针对DES算法的所有攻击

2.特点:密钥建立时间短、灵敏性好、内存需求低、安全性高

package com.crypt.des;

import com.crypt.ByteToHexUtil;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

/**
 * aes加密/解密
 * Created by zhangweixiang on 4/17/2016.
 */
public class AESUtil {

    /**
     * 生成adesckey
     * @param type
     * @return
     * @throws Exception
     */
    public static byte[] generateKey(String type) throws Exception {
        KeyGenerator keyGenerator = KeyGenerator.getInstance(type);
        keyGenerator.init(128);//默认为128位,如果使用192 256则需获取无政策文件(从oracle官网下载UnlimitedJECPolicyJDK7解压后将
                                //其中的2个jar拷贝到jre下的lib下的security中即可 )
        SecretKey secretKey = keyGenerator.generateKey();
        return  secretKey.getEncoded();
    }

    /**
     * 通过指定的aeskey加密
     * @param data 加密的数据
     * @param key 秘钥
     * @param type 加密方式
     * @return 加密信息
     * @throws Exception
     */
    public static byte[] encrypt(byte[] data,byte[] key,String type) throws Exception {
        SecretKey secretKey = new SecretKeySpec(key,type);
        Cipher cipher = Cipher.getInstance(type);
        cipher.init(Cipher.ENCRYPT_MODE,secretKey);
        return cipher.doFinal(data);
    }

    /**
     * aes解密
     * @param data 需要解密的数据
     * @param key 解密秘钥
     * @param type 类型
     * @return 解密后的结果
     * @throws Exception
     */
    public static byte[] decrypt(byte[] data,byte[] key,String type) throws Exception {
        SecretKey secretKey = new SecretKeySpec(key,type);
        Cipher cipher = Cipher.getInstance(type);
        cipher.init(Cipher.DECRYPT_MODE,secretKey);
        return cipher.doFinal(data);
    }

    public static void main(String[] args) throws Exception {
        String data = "test desc";
        String type = "AES";//AES/ECB/PKCS5Padding
        byte[] key = AESUtil.generateKey(type);
        byte[] encData = AESUtil.encrypt(data.getBytes(),key,type);
        String encDataStr = ByteToHexUtil.bytesToHexString(encData);
        System.out.println(data+">>aes encrypt>>"+encDataStr);

        byte[] decData = AESUtil.decrypt(encData,key,type);
        System.out.println(encDataStr+">>aes decrypt>>"+new String(decData));
    }
}
展开阅读全文

3DESAES

08-15

<p>n <span><strong>一、课程简介</strong></span>n</p>n<p>n <span>这是</span><span><span style="color:#E56600;font-size:14px;">『</span><span style="color:#E56600;font-size:14px;">Java学习指南系列</span><span style="color:#E56600;"></span><span style="color:#E56600;font-size:14px;">』</span></span><span>的第16篇教程 ,是Java开发的高级课程,介绍实际工程里常见的各种专项技术。</span>n</p>n<span style="font-size:14px;"><br /></span>n<p>n <span><strong>二、主要内容 </strong></span>n</p>n<p>n <span>(每章内容独立,各自独立成章)</span>n</p>n<p>n <span>* 视频和音频的播放 ( libVLC ) </span>n</p>n<p>n <span>* Excel 表格处理 ( POI )</span>n</p>n<p>n <span>* Word 文档处理 <span>( POI )</span></span>n</p>n<p>n <span>* 二维码的生成和解析 ( QRCode )</span>n</p>n<p>n <span>* 图片处理</span>n</p>n<p>n <span>* 视频处理</span>n</p>n<p>n <span>* 本地程序调用技术</span>n</p>n<p>n <span>* 连接WEB服务器 ( HTTP Client )</span>n</p>n<p>n <span>* 连接FTP服务器 ( FTP Client )</span>n</p>n<p>n <span>* 发送邮件 (SMTP / MX / SPF )</span>n</p>n<p>n <span>* 发送短信</span>n</p>n<p>n <span>* 数据的编码 ( HEX / Base64)</span>n</p>n<p>n <span>* 数据的校验 ( MD5 / CRC32 / HMAC-SHA1)</span>n</p>n<p>n <span>* 数据的加密 ( DES / AES )</span>n</p>n<p>n <span>* 正则表达式</span>n</p>n<p>n <span>* 反编译技术</span>n</p>n<p>n <span>* 其他专业技术。。</span>n</p>n<br /><p>n <span><strong>三、课程体系</strong></span>n</p>n<p>n <span>〖Java学习指南<span>系列</span>〗</span><span>:包含入门与进阶语法,Swing桌面开发,安卓开发,JavaFX开发,网络通信Socket,数据结构与算法等课程。</span>n</p>n<p>n <span><span style="color:#E56600;">〖网站开发</span><span>系列</span><span style="color:#E56600;"></span><span style="color:#E56600;">〗</span></span><span><span style="color:#E56600;font-size:14px;">:</span><span style="font-size:14px;">包含网页基础、网站入门、数据库、网站中级、FreeMarker、网站高级、项目应用、MyBatis、Redis等课程。</span></span>n</p>

没有更多推荐了,返回首页