3DES加密解密
来源:互联网 发布:武夷山旅游数据网 编辑:程序博客网 时间:2024/06/03 14:31
3DES又称Triple DES,是DES加密算法的一种模式,它使用3条56位的密钥对数据进行三次加密。
3DES(即Triple DES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的加密标准),加密算法,其具体实现如下:设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,M代表明文,C代表密文,这样:
3DES加密过程为:C=Ek3(Dk2(Ek1(M)))
3DES解密过程为:M=Dk1(EK2(Dk3(C)))
具体的java代码如下:
进行3DES加密解密并返回Base64字符串
/** *字符串 DESede(3DES) 加密 */public class DesUtil{ private static final String Algorithm = "DESede"; // 定义 加密算法,可用 DES,DESede,Blowfish private static final String hexString="0123456789ABCDEF"; /** * * @param keybyte 加密密钥,长度为24字节 * @param src 字节数组(根据给定的字节数组构造一个密钥。 ) * @return */ public static byte[] encryptMode(byte[] keybyte, byte[] src) { try { // 根据给定的字节数组和算法构造一个密钥 SecretKey deskey = new SecretKeySpec(keybyte, Algorithm); // 加密 Cipher c1 = Cipher.getInstance(Algorithm); c1.init(Cipher.ENCRYPT_MODE, deskey); return c1.doFinal(src); } catch (java.security.NoSuchAlgorithmException e1) { e1.printStackTrace(); } catch (javax.crypto.NoSuchPaddingException e2) { e2.printStackTrace(); } catch (Exception e3) { e3.printStackTrace(); } return null; } /** * * @param keybyte 密钥 * @param src 需要解密的数据 * @return */ public static byte[] decryptMode(byte[] keybyte, byte[] src) { try { // 生成密钥 SecretKey deskey = new SecretKeySpec(keybyte, Algorithm); // 解密 Cipher c1 = Cipher.getInstance(Algorithm); c1.init(Cipher.DECRYPT_MODE, deskey); return c1.doFinal(src); } catch (java.security.NoSuchAlgorithmException e1) { e1.printStackTrace(); } catch (javax.crypto.NoSuchPaddingException e2) { e2.printStackTrace(); } catch (Exception e3) { e3.printStackTrace(); } return null; } /** * 字符串转为16进制 * @param str * @return */ public static String encode(String str) { //根据默认编码获取字节数组 byte[] bytes=str.getBytes(); StringBuilder sb=new StringBuilder(bytes.length*2); //将字节数组中每个字节拆解成2位16进制整数 for(int i=0;i<bytes.length;i++) { sb.append(hexString.charAt((bytes[i]&0xf0)>>4)); sb.append(hexString.charAt((bytes[i]&0x0f)>>0)); } return sb.toString(); } /** * * @param bytes * @return * 将16进制数字解码成字符串,适用于所有字符(包括中文) */ public static String decode(String bytes) { ByteArrayOutputStream baos=new ByteArrayOutputStream(bytes.length()/2); //将每2位16进制整数组装成一个字节 for(int i=0;i<bytes.length();i+=2) baos.write((hexString.indexOf(bytes.charAt(i))<<4 |hexString.indexOf(bytes.charAt(i+1)))); return new String(baos.toByteArray()); } // 转换成十六进制字符串 public static String byte2hex(byte[] b) { String hs = ""; String stmp = ""; for (int n = 0; n < b.length; n++) { stmp = (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(); }}
可以写相应的测试类进行测试
加密:
final byte[] keyBytes= Constant.DESKEY.getBytes();//密钥串(调用配置文件中的密钥串,自己也可以直接写再getBytes()) byte[] contentBytes = DesUtil.encryptMode(keyBytes, content.getBytes());//加密之后的路径 encrypt= Base64.encodeBase64String(contentBytes);//返回Base64的字符串
解密:
byte[] bytes = decoder.decodeBuffer(sign);//通过BASE64Decoder将加密的字符串转化为byte[] byte[] dSign = DesUtil.decryptMode(keyBytes, bytes);//解密 String signString = new String(dSign, "utf-8");//设置编码,防止乱码
0 0
- DES/3DES加密,解密
- 3DES 加密解密
- 3des加密解密
- 3-DES加密解密
- 3DES加密解密
- 3des加密解密
- 3des加密解密
- 3DES 加密解密
- 3DES加密解密
- 3DES 加密解密
- 3DES 加密、解密
- 3DES 加密解密
- 3DES加密解密
- 3des加密解密
- des/3des加密解密验证网站
- stm8 des/3des加密解密
- sunjce iOS des 3des解密加密
- 3DES加密与解密
- opencv Mat显示到指定窗体 CImage实现
- C# 添加、获取及删除PDF附件
- linux 命令大全
- 每日积累(20170117-day-22)(shell: set x e $#,$@,$0,$1,$2)
- [yii2]-- [view] -- 在页面底部加载css和js
- 3DES加密解密
- Bfs广搜 HDU - 2612
- 采用便携式终端实现端到端 视频电话应急通信
- 各种安装包的下载地址
- 移动端(pc)禁止长按拷贝
- C-Free安装MinGW编译工具
- JavaScript相关基础知识
- SQL语句的优化建议
- 神经网络编程入门