真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

des加密java代碼 des算法java代碼

DES加密算法 java實現(xiàn)

/*

成都創(chuàng)新互聯(lián)公司專注于陽西網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供陽西營銷型網(wǎng)站建設,陽西網(wǎng)站制作、陽西網(wǎng)頁設計、陽西網(wǎng)站官網(wǎng)定制、微信小程序服務,打造陽西網(wǎng)絡公司原創(chuàng)品牌,更為您提供陽西網(wǎng)站排名全網(wǎng)營銷落地服務。

* DesEncrypt.java

*

* Created on 2007-9-20, 16:10:47

*

* To change this template, choose Tools | Template Manager

* and open the template in the editor.

*/

//思路: 因為 任意一個字符串,都是由若干字節(jié)表示的,每個字節(jié)實質就是一個

// 有8位的進進制數(shù),

// 又因為 一個8位二進制數(shù),可用兩位16進制字符串表示.

// 因此 任意一個字符串可以由兩位16進制字符串表示。

// 而 DES是對8位二進制數(shù)進行加密,解密。

// 所以 用DES加密解密時,可以把加密所得的8位進進制數(shù),轉成

// 兩位16進制數(shù)進行保存,傳輸。

// 具體方法:1 把一個字符串轉成8位二進制數(shù),用DES加密,得到8位二進制數(shù)的

// 密文

// 2 然后把(由1)所得的密文轉成兩位十六進制字符串

// 3 解密時,把(由2)所得的兩位十六進制字符串,轉換成8位二進制

// 數(shù)的密文

// 4 把子3所得的密文,用DES進行解密,得到8位二進制數(shù)形式的明文,

// 并強制轉換成字符串。

// 思考:為什么要通過兩位16進制數(shù)字符串保存密文呢?

// 原因是:一個字符串加密后所得的8位二進制數(shù),通常不再時字符串了,如果

// 直接把這種密文所得的8位二進制數(shù)強制轉成字符串,有許多信息因為異

// 常而丟失,導制解密失敗。因制要把這個8位二制數(shù),直接以數(shù)的形式

// 保存下來,而通常是用兩位十六進制數(shù)表示。

package frelationmainten;

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;

/**

* 根據(jù)參數(shù)生成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) { //一個字節(jié)的數(shù),

// 轉成16進制字符串

String hs = "";

String stmp = "";

for (int n = 0; n b.length; n++) {

//整數(shù)轉成十六進制表示

stmp = (java.lang.Integer.toHexString(b[n] 0XFF));

if (stmp.length() == 1)

hs = hs + "0" + stmp;

else

hs = hs + stmp;

}

return hs.toUpperCase(); //轉成大寫

}

public static byte[] hex2byte(byte[] b) {

if((b.length%2)!=0)

throw new IllegalArgumentException("長度不是偶數(shù)");

byte[] b2 = new byte[b.length/2];

for (int n = 0; n b.length; n+=2) {

String item = new String(b,n,2);

// 兩位一組,表示一個字節(jié),把這樣表示的16進制字符串,還原成一個進制字節(jié)

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();

}

}

用java實現(xiàn)des加密和解密

一個用DES來加密、解密的類

import java.security.*;

import javax.crypto.Cipher;

import javax.crypto.SecretKey;

import javax.crypto.SecretKeyFactory;

import javax.crypto.spec.DESKeySpec;

/**

* 字符串工具集合

* @author Liudong

*/

public class StringUtils {

private static final String PASSWORD_CRYPT_KEY = "__jDlog_";

private final static String DES = "DES";

/**

* 加密

* @param src 數(shù)據(jù)源

* @param key 密鑰,長度必須是8的倍數(shù)

* @return 返回加密后的數(shù)據(jù)

* @throws Exception

*/

public static byte[] encrypt(byte[] src, byte[] key)throws Exception {

//DES算法要求有一個可信任的隨機數(shù)源

SecureRandom sr = new SecureRandom();

// 從原始密匙數(shù)據(jù)創(chuàng)建DESKeySpec對象

DESKeySpec dks = new DESKeySpec(key);

// 創(chuàng)建一個密匙工廠,然后用它把DESKeySpec轉換成

// 一個SecretKey對象

SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);

SecretKey securekey = keyFactory.generateSecret(dks);

// Cipher對象實際完成加密操作

Cipher cipher = Cipher.getInstance(DES);

// 用密匙初始化Cipher對象

cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);

// 現(xiàn)在,獲取數(shù)據(jù)并加密

// 正式執(zhí)行加密操作

return cipher.doFinal(src);

}

/**

* 解密

* @param src 數(shù)據(jù)源

* @param key 密鑰,長度必須是8的倍數(shù)

* @return 返回解密后的原始數(shù)據(jù)

* @throws Exception

*/

public static byte[] decrypt(byte[] src, byte[] key)throws Exception {

// DES算法要求有一個可信任的隨機數(shù)源

SecureRandom sr = new SecureRandom();

// 從原始密匙數(shù)據(jù)創(chuàng)建一個DESKeySpec對象

DESKeySpec dks = new DESKeySpec(key);

// 創(chuàng)建一個密匙工廠,然后用它把DESKeySpec對象轉換成

// 一個SecretKey對象

SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);

SecretKey securekey = keyFactory.generateSecret(dks);

// Cipher對象實際完成解密操作

Cipher cipher = Cipher.getInstance(DES);

// 用密匙初始化Cipher對象

cipher.init(Cipher.DECRYPT_MODE, securekey, sr);

// 現(xiàn)在,獲取數(shù)據(jù)并解密

// 正式執(zhí)行解密操作

return cipher.doFinal(src);

}

/**

* 密碼解密

* @param data

* @return

* @throws Exception

*/

public final static String decrypt(String data){

try {

return new String(decrypt(hex2byte(data.getBytes()),

PASSWORD_CRYPT_KEY.getBytes()));

}catch(Exception e) {

}

return null;

}

/**

* 密碼加密

* @param password

* @return

* @throws Exception

*/

public final static String encrypt(String password){

try {

return byte2hex(encrypt(password.getBytes(),PASSWORD_CRYPT_KEY.getBytes())); }catch(Exception e) {

}

return null;

}

比較長, 轉了一部分.

用java實現(xiàn)DES加密算法,細致點,要直接粘貼進平臺能運行的?。?/h2>

/*des密鑰生成代碼*/

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectOutputStream;

import java.security.InvalidKeyException;

import java.security.NoSuchAlgorithmException;

import java.security.SecureRandom;

import java.security.spec.InvalidKeySpecException;

import javax.crypto.KeyGenerator;

import javax.crypto.SecretKey;

import javax.crypto.SecretKeyFactory;

import javax.crypto.spec.DESKeySpec;

import com.huateng.util.common.Log;

public class GenKey {

private static final String DES = "DES";

public static final String SKEY_NAME = "key.des";

public static void genKey1(String path) {

// 密鑰

SecretKey skey = null;

// 密鑰隨機數(shù)生成

SecureRandom sr = new SecureRandom();

//生成密鑰文件

File file = genFile(path);

try {

// 獲取密鑰生成實例

KeyGenerator gen = KeyGenerator.getInstance(DES);

// 初始化密鑰生成器

gen.init(sr);

// 生成密鑰

skey = gen.generateKey();

// System.out.println(skey);

ObjectOutputStream oos = new ObjectOutputStream(

new FileOutputStream(file));

oos.writeObject(skey);

oos.close();

Log.sKeyPath(path);

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* @param file : 生成密鑰的路徑

* SecretKeyFactory 方式生成des密鑰

* */

public static void genKey2(String path) {

// 密鑰隨機數(shù)生成

SecureRandom sr = new SecureRandom();

// byte[] bytes = {11,12,44,99,76,45,1,8};

byte[] bytes = sr.generateSeed(20);

// 密鑰

SecretKey skey = null;

//生成密鑰文件路徑

File file = genFile(path);

try {

//創(chuàng)建deskeyspec對象

DESKeySpec desKeySpec = new DESKeySpec(bytes,9);

//實例化des密鑰工廠

SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);

//生成密鑰對象

skey = keyFactory.generateSecret(desKeySpec);

//寫出密鑰對象

ObjectOutputStream oos = new ObjectOutputStream(

new FileOutputStream(file));

oos.writeObject(skey);

oos.close();

Log.sKeyPath(path);

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

} catch (InvalidKeyException e) {

e.printStackTrace();

} catch (InvalidKeySpecException e) {

e.printStackTrace();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

private static File genFile(String path) {

String temp = null;

File newFile = null;

if (path.endsWith("/") || path.endsWith("\\")) {

temp = path;

} else {

temp = path + "/";

}

File pathFile = new File(temp);

if (!pathFile.exists())

pathFile.mkdirs();

newFile = new File(temp+SKEY_NAME);

return newFile;

}

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

genKey2("E:/a/aa/");

}

}

/*加解密*/

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.ObjectInputStream;

import javax.crypto.Cipher;

import javax.crypto.CipherInputStream;

import javax.crypto.SecretKey;

public class SecUtil {

public static void decrypt(String keyPath, String source, String dest) {

SecretKey key = null;

try

{

ObjectInputStream keyFile = new ObjectInputStream(

//讀取加密密鑰

new FileInputStream(keyPath));

key = (SecretKey) keyFile.readObject();

keyFile.close();

}

catch (FileNotFoundException ey1) {

throw new RuntimeException(ey1);

}

catch (Exception ey2) {

throw new RuntimeException(ey2);

}

//用key產(chǎn)生Cipher

Cipher cipher = null;

try {

//設置算法,應該與加密時的設置一樣

cipher = Cipher.getInstance("DES");

//設置解密模式

cipher.init(Cipher.DECRYPT_MODE, key);

}

catch (Exception ey3) {

throw new RuntimeException(ey3);

}

//取得要解密的文件并解密

File file = new File(source);

String filename = file.getName();

try {

//輸出流,請注意文件名稱的獲取

BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(dest));

//輸入流

CipherInputStream in = new CipherInputStream(new BufferedInputStream(

new FileInputStream(file)), cipher);

int thebyte = 0;

while ( (thebyte = in.read()) != -1) {

out.write(thebyte);

}

in.close();

out.close();

}

catch (Exception ey5) {

throw new RuntimeException(ey5);

}

}

public static void encrypt(String keyPath, String source, String dest) {

SecretKey key = null;

try

{

ObjectInputStream keyFile = new ObjectInputStream(

//讀取加密密鑰

new FileInputStream(keyPath));

key = (SecretKey) keyFile.readObject();

keyFile.close();

}

catch (FileNotFoundException ey1) {

throw new RuntimeException(ey1);

}

catch (Exception ey2) {

throw new RuntimeException(ey2);

}

//用key產(chǎn)生Cipher

Cipher cipher = null;

try {

//設置算法,應該與加密時的設置一樣

cipher = Cipher.getInstance("DES");

//設置解密模式

cipher.init(Cipher.ENCRYPT_MODE, key);

}

catch (Exception ey3) {

throw new RuntimeException(ey3);

}

//取得要解密的文件并解密

File file = new File(source);

String filename = file.getName();

try {

//輸出流,請注意文件名稱的獲取

BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(dest));

//輸入流

CipherInputStream in = new CipherInputStream(new BufferedInputStream(

new FileInputStream(file)), cipher);

int thebyte = 0;

while ( (thebyte = in.read()) != -1) {

out.write(thebyte);

}

in.close();

out.close();

}

catch (Exception ey5) {

throw new RuntimeException(ey5);

}

}

}


當前名稱:des加密java代碼 des算法java代碼
URL分享:http://weahome.cn/article/hpshhj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部