package com.example.yang.myapplication;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import static com.example.yang.myapplication.MyUtil.bytesToHexString;
import static com.example.yang.myapplication.MyUtil.hexStringToBytes;
import static java.lang.System.arraycopy;
/**
* DES 加密算法 DES和3DES ECB模式的加解密
* @author yangyongzhen
*
*/
public class DesUtil {
public final static String DES = "DES";
/**
* 加密
* @param data byte[]
* @param key byte[]
* @return byte[]
*/
public static byte[] DES_encrypt(byte[] data, byte[] key) {
try{
// 生成一个可信任的随机数源
SecureRandom sr = new SecureRandom();
// 从原始密钥数据创建DESKeySpec对象
DESKeySpec dks = new DESKeySpec(key);
// 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
SecretKey securekey = keyFactory.generateSecret(dks);
// Cipher对象实际完成加密操作
Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding");
// 用密钥初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
return cipher.doFinal(data);
}catch(Throwable e){
e.printStackTrace();
}
return null;
}
/**
* 解密
* @param data byte[]
* @param key byte[]
* @return byte[]
*/
public static byte[] DES_decrypt(byte[] data, byte[] key) {
try{
// 生成一个可信任的随机数源
SecureRandom sr = new SecureRandom();
// 从原始密钥数据创建DESKeySpec对象
DESKeySpec dks = new DESKeySpec(key);
// 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
SecretKey securekey = keyFactory.generateSecret(dks);
// Cipher对象实际完成解密操作
Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding");
// 用密钥初始化Cipher对象
cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
return cipher.doFinal(data);
}catch(Throwable e){
e.printStackTrace();
}
return null;
}
public static byte[] DES_encrypt_3(byte[] datasource, byte[] key){
if ((key.length!= 16) || ((datasource.length%8 )!= 0)){
return null;
}
byte[] Lkey = new byte[8];
byte[] Rkey = new byte[8];
arraycopy(key,0,Lkey,0,8);
arraycopy(key,8,Rkey,0,8);
byte[] outdata,tmpdata;
outdata = DES_encrypt(datasource,Lkey);//加
tmpdata = DES_decrypt(outdata,Rkey);//解
outdata = DES_encrypt(tmpdata,Lkey);//加
return outdata;
}
public static byte[] DES_decrypt_3(byte[] datasource, byte[] key){
if ((key.length!= 16) || ((datasource.length%8 )!= 0)) {
return null;
}
byte[] Lkey = new byte[8];
byte[] Rkey = new byte[8];
arraycopy(key,0,Lkey,0,8);
arraycopy(key,8,Rkey,0,8);
byte[] outdata,tmpdata;
outdata = DES_decrypt(datasource,Lkey);//解
tmpdata = DES_encrypt(outdata,Rkey);//加
outdata = DES_decrypt(tmpdata,Lkey);//解
return outdata;
}
public static void main(String[] args) {
String strkey = "258FB0Ab70D025CDB99DF2C4D302D646";
String K1 = strkey.substring(0, strkey.length() / 2);
String K2 = strkey.substring(strkey.length() / 2);
String strdata = "46F161A743497B32EAC760DF5EA57DF5";
String D1 = strdata.substring(0, strdata.length() / 2);
String D2 = strdata.substring(strdata.length() / 2);
byte[] bt;
String out;
bt = DES_decrypt(hexStringToBytes(D1),hexStringToBytes(K1));
out = bytesToHexString(bt);
System.out.println("discryption结果为:"+out);
bt = DES_encrypt(hexStringToBytes(D1),hexStringToBytes(K1));
out = bytesToHexString(bt);
System.out.println("encryption结果为:"+out);
bt = DES_encrypt_3(hexStringToBytes(strdata),hexStringToBytes(strkey));
out = bytesToHexString(bt);
System.out.println("encryption_3结果为:"+out);
bt = DES_decrypt_3(hexStringToBytes(strdata),hexStringToBytes(strkey));
out = bytesToHexString(bt);
System.out.println("decryption_3结果为:"+out);
}
}
java的DES和3DES加解密算法
原创
©著作权归作者所有:来自51CTO博客作者特立独行的猫a的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
SpringBoot 接口数据加解密解说,你的系统真的安全吗?
SpringBoot 接口数据加解密解说,你的系统真的安全吗?
接口加密解密 接口安全 java -
技术解密Java Chassis 3超实用的可观测性
本文将解密如何使用Java Chassis 3可观测能力来快速定位问题,以及这个能力是如何构建起来的。
数据 问题定位 ServiceComb 微服务 Java Chassis 3 -
3DES加解密java实现
最近做手机银行需要加密一些东西,需要用到3DES加密,简单的了解了一下。涉及的几个概念 原文:需要加密的内容,加密时需要转换成字符数组 密文
java 加密 3DES 数组 字节数组 -
3DES(DESede、Triple-DES、DES-EDE) 加解密 JAVA
3DES、DESede、Triple-DES、DES-EDE名称相互都是别名一、java加解密代码默认模式
3DES DESede Triple-DES DES-EDE java -
arm架构下yum下载chrom
ROS(robot operaring system)作为移动机器人软件架构,近几年得到了越来越广泛的应用,但是大部分应用是基于X86架构的处理器,怎么样将这么强大的工具和应用极为广泛的ARM处理器结合在一起,是现在很多开发者急于解决的问题。我作为ROS的初学者最近也尝试了一把ROS 的ARM移植,纠结了四五天,不过最后还是成功了。虽然现在针对非X86架构的处理器产生了一些ROS的应用方案,比如e
arm架构下yum下载chrom Arm上搭建linux教程 python easy_install boost库