代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
des加解密
作者:
/ 发布于
2017/5/15
/
580
package com.des.test; import java.security.NoSuchAlgorithmException; 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; import javax.crypto.spec.IvParameterSpec; public class DES { /** * * * * @return DES算法密钥 */ public static byte[] generateKey() { try { // DES算法要求有一个可信任的随机数源 SecureRandom sr = new SecureRandom(); // 生成一个DES算法的KeyGenerator对象 KeyGenerator kg = KeyGenerator.getInstance("DES"); kg.init(sr); // 生成密钥 SecretKey secretKey = kg.generateKey(); // 获取密钥数据 byte[] key = secretKey.getEncoded(); return key; } catch (NoSuchAlgorithmException e) { System.err.println("DES算法,生成密钥出错!"); e.printStackTrace(); } return null; } /** * * 加密函数 * * * * @param data * * 加密数据 * * @param key * * 密钥 * * @return 前往加密后的数据 */ public static byte[] encrypt(byte[] data, byte[] key) { try { // DES算法要求有一个可信任的随机数源 SecureRandom sr = new SecureRandom(); // 从原始密钥数据树立DESKeySpec对象 DESKeySpec dks = new DESKeySpec(key); // 树立一个密匙工厂,然后用它把DESKeySpec转换成 // 一个SecretKey对象 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey secretKey = keyFactory.generateSecret(dks); // using DES in ECB mode Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); // 用密匙原始化Cipher对象 cipher.init(Cipher.ENCRYPT_MODE, secretKey, sr); // 执行加密操作 byte encryptedData[] = cipher.doFinal(data); return encryptedData; } catch (Exception e) { System.err.println("DES算法,加密数据出错!"); e.printStackTrace(); } return null; } /** * * 解密函数 * * * * @param data * * 解密数据 * * @param key * * 密钥 * * @return 前往解密后的数据 */ public static byte[] decrypt(byte[] data, byte[] key) { try { // DES算法要求有一个可信任的随机数源 SecureRandom sr = new SecureRandom(); // byte rawKeyData[] = /* 用某种方法获取原始密匙数据 */; // 从原始密匙数据树立一个DESKeySpec对象 DESKeySpec dks = new DESKeySpec(key); // 树立一个密匙工厂,然后用它把DESKeySpec对象转换成 // 一个SecretKey对象 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey secretKey = keyFactory.generateSecret(dks); // using DES in ECB mode Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); // 用密匙原始化Cipher对象 cipher.init(Cipher.DECRYPT_MODE, secretKey, sr); // 正式执行解密操作 byte decryptedData[] = cipher.doFinal(data); return decryptedData; } catch (Exception e) { System.err.println("DES算法,解密出错。"); e.printStackTrace(); } return null; } /** * * 加密函数 * * * * @param data * * 加密数据 * * @param key * * 密钥 * * @return 前往加密后的数据 */ public static byte[] CBCEncrypt(byte[] data, byte[] key, byte[] iv) { try { // 从原始密钥数据树立DESKeySpec对象 DESKeySpec dks = new DESKeySpec(key); // 树立一个密匙工厂,然后用它把DESKeySpec转换成 // 一个SecretKey对象 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey secretKey = keyFactory.generateSecret(dks); // Cipher对象实践完成加密操作 Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); // 若采用NoPadding方式,data长度必需是8的倍数 // Cipher cipher = Cipher.getInstance("DES/CBC/NoPadding"); // 用密匙原始化Cipher对象 IvParameterSpec param = new IvParameterSpec(iv); cipher.init(Cipher.ENCRYPT_MODE, secretKey, param); // 执行加密操作 byte encryptedData[] = cipher.doFinal(data); return encryptedData; } catch (Exception e) { System.err.println("DES算法,加密数据出错!"); e.printStackTrace(); } return null; } /** * * 解密函数 * * * * @param data * * 解密数据 * * @param key * * 密钥 * * @return 前往解密后的数据 */ public static byte[] CBCDecrypt(byte[] data, byte[] key, byte[] iv) { try { // 从原始密匙数据树立一个DESKeySpec对象 DESKeySpec dks = new DESKeySpec(key); // 树立一个密匙工厂,然后用它把DESKeySpec对象转换成 // 一个SecretKey对象 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey secretKey = keyFactory.generateSecret(dks); // using DES in CBC mode Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); // 若采用NoPadding方式,data长度必需是8的倍数 // Cipher cipher = Cipher.getInstance("DES/CBC/NoPadding"); // 用密匙原始化Cipher对象 IvParameterSpec param = new IvParameterSpec(iv); cipher.init(Cipher.DECRYPT_MODE, secretKey, param); // 正式执行解密操作 byte decryptedData[] = cipher.doFinal(data); return decryptedData; } catch (Exception e) { System.err.println("DES算法,解密出错。"); e.printStackTrace(); } return null; } // 转换成十六进制字符串 public static String byte2hex(byte[] b) { String hs = ""; String stmp = ""; for (int n = 0; n < b.length; n++) { stmp = (java.lang.Integer.toHexString(b[n] & 0XFF)); if (stmp.length() == 1) hs = hs + "0" + stmp; else hs = hs + stmp; if (n < b.length - 1) hs = hs + ":"; } return hs.toUpperCase(); } public static void main(String[] args) { try { byte[] key = "12345678".getBytes(); byte[] iv = "11111111".getBytes(); byte[] data = DES.encrypt("hello world!".getBytes(), key); System.out.println("ecb encStr:"+byte2hex(data)); System.out.print("===========ECB mode============"); System.out.println(new String(DES.decrypt(data, key))); System.out.print("=============CBC mode==========="); data = DES.CBCEncrypt("hello world!".getBytes(), key, iv); System.out.println(new String(DES.CBCDecrypt(data, key, iv))); } catch (Exception e) { e.printStackTrace(); } } }
试试其它关键字
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
贡献的其它代码
Label
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3