這段代碼你解密了嗎?我有些自己的看法,可以交流下
創(chuàng)新互聯(lián)IDC提供業(yè)務(wù):服務(wù)器主機(jī)托管,成都服務(wù)器租用,服務(wù)器主機(jī)托管,重慶服務(wù)器租用等四川省內(nèi)主機(jī)托管與主機(jī)租用業(yè)務(wù);數(shù)據(jù)中心含:雙線機(jī)房,BGP機(jī)房,電信機(jī)房,移動機(jī)房,聯(lián)通機(jī)房。
前3個為構(gòu)造方法,都是構(gòu)造密匙。方法中調(diào)用b方法實質(zhì)返回值為Key的那個b方法,倒數(shù)第二個是正在的加密解密步驟,因為上文使用的key初始化的時候用的是2,故為解密,(1表示加密)。
以下幾點為本人拙見,第四個方法為轉(zhuǎn)換原始明文
最后一個b方法 我寫成這樣a1(a2(paramstring)) , a2為第四個方法a,看參數(shù)就知道了,a1為含有doFinal的解密方法。
我私人有點問題希望和題主交流。以上拙見,疏漏難免。
package com.cube.limail.util;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;/**
* 加密解密類
*/
public class Eryptogram
{
private static String Algorithm ="DES";
private String key="CB7A92E3D3491964";
//定義 加密算法,可用 DES,DESede,Blowfish
static boolean debug = false ;
/**
* 構(gòu)造子注解.
*/
public Eryptogram ()
{
} /**
* 生成密鑰
* @return byte[] 返回生成的密鑰
* @throws exception 扔出異常.
*/
public static byte [] getSecretKey () throws Exception
{
KeyGenerator keygen = KeyGenerator.getInstance (Algorithm );
SecretKey deskey = keygen.generateKey ();
System.out.println ("生成密鑰:"+bytesToHexString (deskey.getEncoded ()));
if (debug ) System.out.println ("生成密鑰:"+bytesToHexString (deskey.getEncoded ()));
return deskey.getEncoded ();
} /**
* 將指定的數(shù)據(jù)根據(jù)提供的密鑰進(jìn)行加密
* @param input 需要加密的數(shù)據(jù)
* @param key 密鑰
* @return byte[] 加密后的數(shù)據(jù)
* @throws Exception
*/
public static byte [] encryptData (byte [] input ,byte [] key ) throws Exception
{
SecretKey deskey = new javax.crypto.spec.SecretKeySpec (key ,Algorithm );
if (debug )
{
System.out.println ("加密前的二進(jìn)串:"+byte2hex (input ));
System.out.println ("加密前的字符串:"+new String (input ));
} Cipher c1 = Cipher.getInstance (Algorithm );
c1.init (Cipher.ENCRYPT_MODE ,deskey );
byte [] cipherByte =c1.doFinal (input );
if (debug ) System.out.println ("加密后的二進(jìn)串:"+byte2hex (cipherByte ));
return cipherByte ;
} /**
* 將給定的已加密的數(shù)據(jù)通過指定的密鑰進(jìn)行解密
* @param input 待解密的數(shù)據(jù)
* @param key 密鑰
* @return byte[] 解密后的數(shù)據(jù)
* @throws Exception
*/
public static byte [] decryptData (byte [] input ,byte [] key ) throws Exception
{
SecretKey deskey = new javax.crypto.spec.SecretKeySpec (key ,Algorithm );
if (debug ) System.out.println ("解密前的信息:"+byte2hex (input ));
Cipher c1 = Cipher.getInstance (Algorithm );
c1.init (Cipher.DECRYPT_MODE ,deskey );
byte [] clearByte =c1.doFinal (input );
if (debug )
{
System.out.println ("解密后的二進(jìn)串:"+byte2hex (clearByte ));
System.out.println ("解密后的字符串:"+(new String (clearByte )));
} return clearByte ;
} /**
* 字節(jié)碼轉(zhuǎn)換成16進(jìn)制字符串
* @param byte[] b 輸入要轉(zhuǎn)換的字節(jié)碼
* @return String 返回轉(zhuǎn)換后的16進(jìn)制字符串
*/
public static String byte2hex (byte [] b )
{
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 ;
else hs =hs +stmp ;
if (n b.length -1 ) hs =hs +":";
} return hs.toUpperCase ();
}
/**
* 字符串轉(zhuǎn)成字節(jié)數(shù)組.
* @param hex 要轉(zhuǎn)化的字符串.
* @return byte[] 返回轉(zhuǎn)化后的字符串.
*/
public static byte[] hexStringToByte(String hex) {
int len = (hex.length() / 2);
byte[] result = new byte[len];
char[] achar = hex.toCharArray();
for (int i = 0; i len; i++) {
int pos = i * 2;
result[i] = (byte) (toByte(achar[pos]) 4 | toByte(achar[pos + 1]));
}
return result;
}
private static byte toByte(char c) {
byte b = (byte) "0123456789ABCDEF".indexOf(c);
return b;
}
/**
* 字節(jié)數(shù)組轉(zhuǎn)成字符串.
* @param String 要轉(zhuǎn)化的字符串.
* @return 返回轉(zhuǎn)化后的字節(jié)數(shù)組.
*/
public static final String bytesToHexString(byte[] bArray) {
StringBuffer sb = new StringBuffer(bArray.length);
String sTemp;
for (int i = 0; i bArray.length; i++) {
sTemp = Integer.toHexString(0xFF bArray[i]);
if (sTemp.length() 2)
sb.append(0);
sb.append(sTemp.toUpperCase());
}
return sb.toString();
}
/**
* 從數(shù)據(jù)庫中獲取密鑰.
* @param deptid 企業(yè)id.
* @return 要返回的字節(jié)數(shù)組.
* @throws Exception 可能拋出的異常.
*/
public static byte[] getSecretKey(long deptid) throws Exception {
byte[] key=null;
String value=null;
//CommDao dao=new CommDao();
// List list=dao.getRecordList("from Key k where k.deptid="+deptid);
//if(list.size()0){
//value=((com.csc.sale.bean.Key)list.get(0)).getKey();
value = "CB7A92E3D3491964";
key=hexStringToByte(value);
//}
if (debug)
System.out.println("密鑰:" + value);
return key;
}
public String encryptData2(String data) {
String en = null;
try {
byte[] key=hexStringToByte(this.key);
en = bytesToHexString(encryptData(data.getBytes(),key));
} catch (Exception e) {
e.printStackTrace();
}
return en;
}
public String decryptData2(String data) {
String de = null;
try {
byte[] key=hexStringToByte(this.key);
de = new String(decryptData(hexStringToByte(data),key));
} catch (Exception e) {
e.printStackTrace();
}
return de;
}
} 加密使用: byte[] key=Eryptogram.getSecretKey(deptid); //獲得鑰匙(字節(jié)數(shù)組)
byte[] tmp=Eryptogram.encryptData(password.getBytes(), key); //傳入密碼和鑰匙,獲得加密后的字節(jié)數(shù)組的密碼
password=Eryptogram.bytesToHexString(tmp); //將字節(jié)數(shù)組轉(zhuǎn)化為字符串,獲得加密后的字符串密碼解密與之差不多
在JSP中確定密碼是否相同的方法是通過js實現(xiàn)的。
將onchange事件添加到兩個文本框中,并在文本框的內(nèi)容發(fā)生更改時觸發(fā)事件,并在此事件中寫入判斷。
下面是步驟:
公共DOCTYPE HTML”- / / / / W3C XHTML 1.0 DTD過渡/ / EN " " "
HTML XMLNS = " "
頭
meta HTTP - equiv =“Content -type”內(nèi)容=“文本/HTML”。Charset = gb2312 "/ 。
script type = "text/javascript" 。
函數(shù)checkpwd () {
Var p1 =文檔。Form1。Pwd1。價值;//獲取密碼框的值。
Var p2 =文檔。Form1。Pwd2。價值;//獲取重新輸入的密碼值。
{if (p1 = = ")
警告(“請輸入您的密碼!”);//密碼被檢測為空,輸入//被記錄。
文檔。Form1。Pwd1。關(guān)注();//專注于密碼框。
返回錯誤;//退出檢測功能。
}//如果允許一個空密碼,此條件可以被撤銷。
如果(p1 !=p2){//確定輸入值是否相同,并顯示錯誤消息。
文檔。GetElementByIdx_x(“味精”)。InnerHTML =“兩個輸入密碼不一致,請重新輸入”;//在div中顯示錯誤消息。
返回錯誤;
密碼是一樣的,你可以繼續(xù)下一步。
form name = "form1" 。
代碼:
確認(rèn)密碼:——onchange事件觸發(fā)檢測——。
div id = "MSG" style = "color: red " / div 。
/形式
The / body 。
/ HTML 。
當(dāng)前標(biāo)題:java密匙校驗代碼 密碼驗證合格程序java
文章地址:http://vcdvsql.cn/article2/ddegcoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗、品牌網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計公司、網(wǎng)站營銷、定制開發(fā)、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)