DES加密解密(适用Windows和Linux系统)防止linux下解密失败
来源:互联网 发布:阿里云自己搭建hadoop 编辑:程序博客网 时间:2024/05/15 04:39
package com.lasun.util;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.security.Key;import java.security.SecureRandom;import javax.crypto.Cipher;import javax.crypto.CipherInputStream;import javax.crypto.CipherOutputStream;import javax.crypto.KeyGenerator;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;import com.lasun.core.services.ParameterManager;public class DESUtil { Key key; public DESUtil() { } public DESUtil(String str) { setKey(str); // 生成密匙 } public Key getKey() { return key; } public void setKey(Key key) { this.key = key; } /** * 根据参数生成 KEY */ public void setKey (String strKey) { try { KeyGenerator _generator = KeyGenerator.getInstance("DES"); //防止linux下 随机生成key SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG" ); secureRandom.setSeed(strKey.getBytes()); _generator.init(56,secureRandom); this.key = _generator.generateKey(); _generator = null; } catch (Exception e) { throw new RuntimeException( "Error initializing SqlMap class. Cause: " + e); } } /** * 根据参数生成 KEY */ /*public void setKey(String strKey) { try { KeyGenerator _generator = KeyGenerator.getInstance("DES"); _generator.init(new SecureRandom(strKey.getBytes())); this.key = _generator.generateKey(); _generator = null; } catch (Exception e) { throw new RuntimeException( "Error initializing SqlMap class. Cause: " + e); } }*/ /** * 加密 String 明文输入 ,String 密文输出 */ public String encryptStr(String strMing) { byte[] byteMi = null; byte[] byteMing = null; String strMi = ""; BASE64Encoder base64en = new BASE64Encoder(); try { byteMing = strMing.getBytes("UTF8"); byteMi = this.encryptByte(byteMing); strMi = base64en.encode(byteMi); } catch (Exception e) { throw new RuntimeException( "Error initializing SqlMap class. Cause: " + e); } finally { base64en = null; byteMing = null; byteMi = null; } return strMi; } /** * 解密 以 String 密文输入 ,String 明文输出 * * @param strMi * @return */ public String decryptStr(String strMi) { BASE64Decoder base64De = new BASE64Decoder(); byte[] byteMing = null; byte[] byteMi = null; String strMing = ""; try { byteMi = base64De.decodeBuffer(strMi); byteMing = this.decryptByte(byteMi); strMing = new String(byteMing, "UTF8"); } catch (Exception e) { throw new RuntimeException( "Error initializing SqlMap class. Cause: " + e); } finally { base64De = null; byteMing = null; byteMi = null; } return strMing; } /** * 加密以 byte[] 明文输入 ,byte[] 密文输出 * * @param byteS * @return */ private byte[] encryptByte(byte[] byteS) { byte[] byteFina = null; Cipher cipher; try { cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, key); byteFina = cipher.doFinal(byteS); } catch (Exception e) { throw new RuntimeException( "Error initializing SqlMap class. Cause: " + e); } finally { cipher = null; } return byteFina; } /** * 解密以 byte[] 密文输入 , 以 byte[] 明文输出 * * @param byteD * @return */ private byte[] decryptByte(byte[] byteD) { Cipher cipher; byte[] byteFina = null; try { cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, key); byteFina = cipher.doFinal(byteD); } catch (Exception e) { throw new RuntimeException( "Error initializing SqlMap class. Cause: " + e); } finally { cipher = null; } return byteFina; } public static void main(String[] args) throws Exception { DESUtil des = new DESUtil("123456"); // DES 加密文件 // des.encryptFile("G:/test.doc", "G:/ 加密 test.doc"); // DES 解密文件 // des.decryptFile("G:/ 加密 test.doc", "G:/ 解密 test.doc"); String str1 = "jui8qayuh7yhqwsh"; // DES 加密字符串 String str2 = des.encryptStr(str1); // DES 解密字符串 String deStr = des.decryptStr(str2); System.out.println(" 加密前: " + str1); System.out.println(" 加密后: " + str2); System.out.println(" 加密后长度: " + str2.length()); System.out.println(" 解密后: " + deStr); } }
说明:蓝色部分(注释掉的)代码 在windows下面好使,但是在linux下面会导致每次生成的key不一样、也就是说加密之后再解密就会保存,网上说由于两个操作系统处理补充字节默认补齐的方式不同,所以出现这样的情况;
红色部分代码防止在linux下随机生成key,在两个操作系统下通用。
- DES加密解密(适用Windows和Linux系统)防止linux下解密失败
- (windows,linux)DES加密解密
- DES加密和解密
- DES加密和解密
- Des加密和解密
- DES加密和解密
- DES解密和加密
- DES加密和解密
- des加密和解密
- DES加密和解密
- linux 下的加密和解密介绍
- DES加密和解密算法
- C# DES加密和解密
- des加密和解密代码
- C#DES加密和解密
- C#DES加密和解密
- android des加密和解密
- 加密和解密 DES RSA
- KeyedCollection 与 KeyNotFoundException
- Silverlight与html网页、javascript交互
- StringBuilder与StringBuffer的区别
- Java heap space----java 内存溢出解决
- MYSQL 技巧
- DES加密解密(适用Windows和Linux系统)防止linux下解密失败
- alert换行
- 使用自定义列显示班级学生信息,要求能够进 行删除和修改,删除时给出提示:如 “ 确信要删 除 - 张三 - 吗? ” ,其中张三为当前行的姓名
- HBase集群搭建
- 使用模版列完成课上例子的实现,用一列显示 全部信息,同时完成修改的功能
- 23种设计模式之单例模式
- 搜索文章收藏
- session
- Linux Platform驱动程序框架解析