Java 的DES算法实现
来源:互联网 发布:unity3d 面部表情 编辑:程序博客网 时间:2024/06/10 03:10
昨天按照网上的资料写DES,但最后在byte[]->String上卡住了.DES需要8位解密,而这种转换后,会讲btye[]补位造成长度和内容改变.很郁闷....最后又在网上找了一个已经实现的例子运行后无问题:
代码如下:
package des;import java.security.Key;import java.security.SecureRandom;import javax.crypto.Cipher;import javax.crypto.KeyGenerator;/** * * 使用DES加密与解密,可对byte[],String类型进行加密与解密 密文可使用String,byte[]存储. * * 方法: void getKey(String strKey)从strKey的字条生成一个Key * * String getEncString(String strMing)对strMing进行加密,返回String密文 String * getDesString(String strMi)对strMin进行解密,返回String明文 * * byte[] getEncCode(byte[] byteS)byte[]型的加密 byte[] getDesCode(byte[] * byteD)byte[]型的解密 */public class DesEncrypt {Key key;/** * 根据参数生成KEY * * @param strKey */public void getKey(String strKey) {try {KeyGenerator _generator = KeyGenerator.getInstance("DES");_generator.init(new SecureRandom(strKey.getBytes()));this.key = _generator.generateKey();_generator = null;} catch (Exception e) {e.printStackTrace();}}/** * 加密String明文输入,String密文输出 * * @param strMing * @return */public String getEncString(String strMing) {byte[] byteMi = null;byte[] byteMing = null;String strMi = "";try {return byte2hex(getEncCode(strMing.getBytes()));// byteMing = strMing.getBytes("UTF8");// byteMi = this.getEncCode(byteMing);// strMi = new String( byteMi,"UTF8");} catch (Exception e) {e.printStackTrace();} finally {byteMing = null;byteMi = null;}return strMi;}/** * 解密 以String密文输入,String明文输出 * * @param strMi * @return */public String getDesString(String strMi) {byte[] byteMing = null;byte[] byteMi = null;String strMing = "";try {return new String(getDesCode(hex2byte(strMi.getBytes())));// byteMing = this.getDesCode(byteMi);// strMing = new String(byteMing,"UTF8");} catch (Exception e) {e.printStackTrace();} finally {byteMing = null;byteMi = null;}return strMing;}/** * 加密以byte[]明文输入,byte[]密文输出 * * @param byteS * @return */private byte[] getEncCode(byte[] byteS) {byte[] byteFina = null;Cipher cipher;try {cipher = Cipher.getInstance("DES");cipher.init(Cipher.ENCRYPT_MODE, key);byteFina = cipher.doFinal(byteS);} catch (Exception e) {e.printStackTrace();} finally {cipher = null;}return byteFina;}/** * 解密以byte[]密文输入,以byte[]明文输出 * * @param byteD * @return */private byte[] getDesCode(byte[] byteD) {Cipher cipher;byte[] byteFina = null;try {cipher = Cipher.getInstance("DES");cipher.init(Cipher.DECRYPT_MODE, key);byteFina = cipher.doFinal(byteD);} catch (Exception e) {e.printStackTrace();} finally {cipher = null;}return byteFina;}/** * 二行制转字符串 * * @param b * @return */public static String byte2hex(byte[] b) { // 一个字节的数,// 转成16进制字符串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;elsehs = hs + stmp;}return hs.toUpperCase(); // 转成大写}public static byte[] hex2byte(byte[] b) {if ((b.length % 2) != 0)throw new IllegalArgumentException("长度不是偶数");byte[] b2 = new byte[b.length / 2];for (int n = 0; n < b.length; n += 2) {String item = new String(b, n, 2);// 两位一组,表示一个字节,把这样表示的16进制字符串,还原成一个进制字节b2[n / 2] = (byte) Integer.parseInt(item, 16);}return b2;}public static void main(String[] args) {System.out.println("hello");DesEncrypt des = new DesEncrypt();//实例化一个对像des.getKey("aadd");//生成密匙String strEnc = des.getEncString("云海飞舞雲122");//加密字符串,返回String的密文System.out.println(strEnc);String strDes = des.getDesString(strEnc);//把String 类型的密文解密System.out.println(strDes);new DesEncrypt();}}
- des算法的java实现!
- Java 的DES算法实现
- Java的DES算法实现
- DES算法的Java实现
- java实现DES算法
- simple-des算法的java实现
- simple-des算法的java实现
- DES算法的实现
- Des算法的实现
- DES算法的实现
- des算法java模拟实现
- 基于java数组的DES加密、解密的算法实现
- S-DES算法的实现
- DES算法的C#实现
- DES算法的matlab实现
- JAVA实现的DES加密解密算法(源程序)(lp)
- 基于java的DES加密解密算法实现
- android实现DES算法和java不兼容的问题解决...
- TripleDES加密、解密算法
- TableViewer, TreeViewer双击编辑
- 在Windows中实现“一键关机”
- JFace 可编辑的TreeViewer和TableViewer
- 游戏Demos 视频
- Java 的DES算法实现
- Swt/Jface tableViewer入门教程1
- Swt/Jface tableViewer入门教程2
- Symbian OS中的RArray类的排序功能
- Swt/Jface tableviewer入门教程3
- Swt/Jface tableviewer入门教程4
- 全面剖析XMLHttpRequest对象
- Swt/Jface listviewer的实现
- Swt/Jface treeViewer的使用