java实现DES加密与解密,md5加密

很多时候要对秘要进行持久化加密,此时的加密采用md5。采用对称加密的时候就采用DES方法了

  1 import java.io.IOException;
  2 import java.security.MessageDigest;
  3 import java.security.SecureRandom;
  4
  5 import javax.crypto.Cipher;
  6 import javax.crypto.SecretKey;
  7 import javax.crypto.SecretKeyFactory;
  8 import javax.crypto.spec.DESKeySpec;
  9
 10 import sun.misc.BASE64Decoder;
 11 import sun.misc.BASE64Encoder;
 12
 13 /**
 14  * 密匙工具类(包含des加密与md5加密)
 15  * @author mingge
 16  *
 17  */
 18 public class KeysUtil {
 19
 20         private final static String DES = "DES";
 21
 22         private final static String MD5 = "MD5";
 23
 24         private final static String KEY="opeddsaead323353484591dadbc382a18340bf83414536";
 25
 26         /**
 27          * MD5加密算法
 28          * @param data
 29          * @return
 30          */
 31         public static String md5Encrypt(String data) {
 32             String resultString = null;
 33             try {
 34                 resultString = new String(data);
 35                 MessageDigest md = MessageDigest.getInstance(MD5);
 36                 resultString =byte2hexString(md.digest(resultString.getBytes()));
 37             } catch (Exception ex) {
 38             }
 39             return resultString;
 40         }
 41
 42
 43         private  static String byte2hexString(byte[] bytes) {
 44             StringBuffer bf = new StringBuffer(bytes.length * 2);
 45             for (int i = 0; i < bytes.length; i++) {
 46                 if ((bytes[i] & 0xff) < 0x10) {
 47                     bf.append("T0");
 48                 }
 49                 bf.append(Long.toString(bytes[i] & 0xff, 16));
 50             }
 51             return bf.toString();
 52         }
 53
 54         /**
 55          * Description 根据键值进行加密
 56          * @param data
 57          * @param key  加密键byte数组
 58          * @return
 59          * @throws Exception
 60          */
 61         public static String desEncrypt(String data, String key) throws Exception {
 62             if (key==null) {
 63                 key=KEY;
 64             }
 65             byte[] bt = encrypt(data.getBytes(), key.getBytes());
 66             String strs = new BASE64Encoder().encode(bt);
 67             return strs;
 68         }
 69
 70         /**
 71          * Description 根据键值进行解密
 72          * @param data
 73          * @param key  加密键byte数组
 74          * @return
 75          * @throws IOException
 76          * @throws Exception
 77          */
 78         public static String desDecrypt(String data, String key) throws IOException,
 79                 Exception {
 80             if (data == null){
 81                 return null;
 82             }
 83             if (key==null) {
 84                 key=KEY;
 85             }
 86             BASE64Decoder decoder = new BASE64Decoder();
 87             byte[] buf = decoder.decodeBuffer(data);
 88             byte[] bt = decrypt(buf,key.getBytes());
 89             return new String(bt);
 90         }
 91
 92         /**
 93          * Description 根据键值进行加密
 94          * @param data
 95          * @param key  加密键byte数组
 96          * @return
 97          * @throws Exception
 98          */
 99         private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
100             // 生成一个可信任的随机数源
101             SecureRandom sr = new SecureRandom();
102             // 从原始密钥数据创建DESKeySpec对象
103             DESKeySpec dks = new DESKeySpec(key);
104             // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
105             SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
106             SecretKey securekey = keyFactory.generateSecret(dks);
107             // Cipher对象实际完成加密操作
108             Cipher cipher = Cipher.getInstance(DES);
109             // 用密钥初始化Cipher对象
110             cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
111             return cipher.doFinal(data);
112         }
113
114
115         /**
116          * Description 根据键值进行解密
117          * @param data
118          * @param key  加密键byte数组
119          * @return
120          * @throws Exception
121          */
122         private static byte[] decrypt(byte[] data, byte[] key) throws Exception {
123             // 生成一个可信任的随机数源
124             SecureRandom sr = new SecureRandom();
125             // 从原始密钥数据创建DESKeySpec对象
126             DESKeySpec dks = new DESKeySpec(key);
127             // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
128             SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
129             SecretKey securekey = keyFactory.generateSecret(dks);
130             // Cipher对象实际完成解密操作
131             Cipher cipher = Cipher.getInstance(DES);
132             // 用密钥初始化Cipher对象
133             cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
134             return cipher.doFinal(data);
135         }
136 }

看到最后我也醉了。。。

时间: 2024-10-01 02:41:00

java实现DES加密与解密,md5加密的相关文章

加密与解密md5 3des

/// <summary> /// MD5加密 /// </summary> /// <param name="s"></param> /// <returns></returns> public static string MD5Encrypt(string s) { string strResult = ""; System.Security.Cryptography.MD5 md5 = S

iOS,一行代码进行RSA、DES 、AES、MD5加密、解密

最近做了一个移动项目,是有服务器和客户端类型的项目,客户端是要登录才行的,服务器也会返回数据,服务器是用Java开发的,客户端要同时支持多平台(Android.iOS),在处理iOS的数据加密的时候遇到了一些问题.起初采取的方案是DES加密,老大说DES加密是对称的,网络抓包加上反编译可能会被破解,故采取RSA方式加密.RSA加密时需要公钥和私钥,客户端保存公钥加密数据,服务器保存私钥解密数据.(iOS端公钥加密私钥解密.java端公钥加密私钥解密,java端私钥加密公钥解密都容易做到,iOS不

AES加密解密&amp;amp;&amp;amp;SHA1、SHA加密&amp;amp;&amp;amp;MD5加密

AES加密解密 SHA1.SHA加密 MD5加密 二话不说立即附上代码: package com.luo.util; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.

java 字符按字母排序-拼接-md5加密-大写

package yixin; import java.security.MessageDigest;import java.util.Arrays; public class data_change {                                          static char[] HEX_DIGITS = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; //HEX_DIGITS为

密码技术应用设计实践-安全信息传输系统(SITS)(用Java实现DES、RSA、MD5算法)

本系统包括五个模块,注册模块.登录模块.RSA算法模块.DES算法模块.MD5算法模块.这五个模块每一个实现不同的功能.注册模块实现将用户名和密码写入文件中,登录模块则负责将其读入并且判断其是否正确.RSA算法模块实现生成密钥对.加密和解密功能.DES算法模块实现加密和解密功能.MD5算法模块是实现生成摘要的功能. (1).首先为注册界面: package test; import javax.swing.*; import java.awt.*;   //导入必要的包 import java.

.Net加密与解密——对称加密

一,思路 对称加密含有一个被称为密钥的东西,在消息发送前使用密钥对消息进行加密,得到密文并发送,接收方收到密文后,使用相同的密钥进行解密,获得原消息. PS:使用密钥对消息进行加密的过程,由加密算法来完成的,加密算法通常也是公开的. 二,对称加密的流程 1,发送方和接收方持有相同的密钥,并严格保密 2,发送方使用密钥对消息进行加密,然后发送消息 3,接收方收到消息后,使用相同的密钥对消息进行解密 PS:在这一过程中,第三方可能截获消息,但得到的知识一堆乱码 三,Demo using System

.Net加密与解密——非对称加密之加密模式

一,非对称加密 非对称加密具有一组密钥对,一个是对外公开的,任何人都可以获取,称为公钥: 一个是自行保管并严格保密的,称为私钥. 规则如下: 由某人A的公钥加密消息,只能由A的私钥进行解密: 由A的私钥加密的消息,只能由A的公钥解密. 发送方,接收方都持有公钥/私钥对,因此一共会有四个密钥.非堆成加密的好处在于,私钥自己持有,公钥完全公开. 二,加密模式 步骤: 1,接收方公布自己的公钥,任何人都可以获得. 2,发送方使用接收方的公钥对消息进行加密,然后发送. 3,接收方使用自己的私钥对消息进行

.Net加密与解密——非对称加密之数字签名

一,从非对称加密的认证模式说起 由消息的发送方发布公钥,持有私钥. 步骤: 1,发送方公布自己的公钥,任何人都可以获得. 2,发送方使用自己的私钥对消息进行加密,然后发送. 3,接收方使用发送方的公钥对消息进行解密. 缺点: 1,任何截获该消息的第三方都能够使用发送方公钥进行解密: 2,耗时,不适用于大数据 二,数字签名       过程: 1,发送方对想要传递的消息进行散列运算,得到原始消息摘要.(摘要可以代表消息本身,相当于指纹) 2,发送方使用自己的私钥只对消息摘要进行加密,该过程也称作签

一个很奇怪的问题,程序没有改动加密参数应该也没有变化.但是两次的加密结果却不一致.md5加密问题

从图上我们看出20160803的加密结果是AAEBA9C578EA522215EAE76AFCAF250.时间是9.4分 现在我们再看这个同样的加密地址与时间结果却是另一种 31672B16....... 我想问的是为什么会造成这种后果呢,是md5的加密有问题呢还是 程序的不稳定性呢 ?

DES对称加解密、AES RijndaelManaged加解密、Base64加密解密、MD5加密等操作辅助类 EncodeHelper

/// <summary> /// 使用默认加密 /// </summary> /// <param name="strText"></param> /// <returns></returns> public static string DesEncrypt(string strText) /// <summary> /// 使用默认解密 /// </summary> /// <pa