㈠ java地址欄加密
軟體開發中,當在不同頁面之間傳遞參數時,為了系統的安全,常將地址欄中的信息加密處理,由於是通過表單傳遞數據,因此我們不能用Java代碼對其加密,只能通過js函數對數據信息加密,下面是我在網上找的js的加密代碼(採用base64加密方式):<script type="text/javascript"><!--var keyStr = "ABCDEFGHIJKLMNOP" +
"QRSTUVWXYZabcdef" +
"ghijklmnopqrstuv" +
"wxyz0123456789+/" +
"=";//加密函數function encode64(input) {
input = escape(input);//注意escape()函數
var output = "";
var chr1, chr2, chr3 = "";
var enc1, enc2, enc3, enc4 = "";
var i = 0;do {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}output = output +
keyStr.charAt(enc1) +
keyStr.charAt(enc2) +
keyStr.charAt(enc3) +
keyStr.charAt(enc4);
chr1 = chr2 = chr3 = "";
enc1 = enc2 = enc3 = enc4 = "";
} while (i < input.length);return output;
}//解密函數function decode64(input) {
var output = "";
var chr1, chr2, chr3 = "";
var enc1, enc2, enc3, enc4 = "";
var i = 0;// remove all characters that are not A-Z, a-z, 0-9, +, /, or =
var base64test = /[^A-Za-z0-9\+\/\=]/g;
if (base64test.exec(input)) {
alert("There were invalid base64 characters in the input text.\n" +
"Valid base64 characters are A-Z, a-z, 0-9, '+', '/', and '='\n" +
"Expect errors in decoding.");
}
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");do {
enc1 = keyStr.indexOf(input.charAt(i++));
enc2 = keyStr.indexOf(input.charAt(i++));
enc3 = keyStr.indexOf(input.charAt(i++));
enc4 = keyStr.indexOf(input.charAt(i++));chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;output = output + String.fromCharCode(chr1);if (enc3 != 64) {
output = output + String.fromCharCode(chr2);
}
if (enc4 != 64) {
output = output + String.fromCharCode(chr3);
}chr1 = chr2 = chr3 = "";
enc1 = enc2 = enc3 = enc4 = "";} while (i < input.length);return unescape(output);//注意unescape()函數
}
//--></script>當我們採用encode64(input)函數對數據加密之後,當要在Java代碼中對數據解密時,我們不能調用js的decoder(input)函數,必須使用Java語言編寫的函數。apache公司提供的commons-codec-1.3.jar類庫中的org.apache.commons.codec.binary.Base64包提供了encodeBase64(byte[] bts)和decodeBase64(byte[] bts)方法實現了數據的Base64()加密,但與上面的js代碼的加密和解密函數並不一一對應,為例實現用js代碼加密,用java函數解密,我們必須調用另外一個java函數,unescape(String src),其代碼如下:private static String unescape(String src) {
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length());
int lastPos = 0, pos = 0;
char ch;
while (lastPos < src.length()) {
pos = src.indexOf("%", lastPos);
if (pos == lastPos) {
if (src.charAt(pos + 1) == 'u') {
ch = (char) Integer.parseInt(src
.substring(pos + 2, pos + 6), 16);
tmp.append(ch);
lastPos = pos + 6;
} else {
ch = (char) Integer.parseInt(src
.substring(pos + 1, pos + 3), 16);
tmp.append(ch);
lastPos = pos + 3;
}
} else {
if (pos == -1) {
tmp.append(src.substring(lastPos));
lastPos = src.length();
} else {
tmp.append(src.substring(lastPos, pos));
lastPos = pos;
}
}
}
return tmp.toString();
}與js代碼中的unescape() 函數對應,才能正確的對數據信息解密,解密方法為:public static String decode64(String encode){
//調用org.apache.commons.codec.binary.Base64包,在commons-codec-1.3.jar中
Base64 base64 = new Base64();
byte[] byteOfEncode = encode.getBytes();
byte[] byteOfDecode = Base64.decodeBase64(byteOfEncode);//調用decodeBase64方法
String decode = new String(byteOfDecode);
return unescape(decode);//調用unescape(String src)方法
}附:在網上找到的java編寫的escape()方法:public class EscapeUnescape {
public static String escape(String src) {
int i;
char j;
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length() * 6);
for (i = 0; i < src.length(); i++) {
j = src.charAt(i);
if (Character.isDigit(j) || Character.isLowerCase(j)
|| Character.isUpperCase(j))
tmp.append(j);
else if (j < 256) {
tmp.append("%");
if (j < 16)
tmp.append("0");
tmp.append(Integer.toString(j, 16));
} else {
tmp.append("%u");
tmp.append(Integer.toString(j, 16));
}
}
return tmp.toString();
}
㈡ java最常用的幾種加密演算法
簡單的Java加密演算法有:
第一種. BASE
Base是網路上最常見的用於傳輸Bit位元組代碼的編碼方式之一,大家可以查看RFC~RFC,上面有MIME的詳細規范。Base編碼可用於在HTTP環境下傳遞較長的標識信息。例如,在Java Persistence系統Hibernate中,就採用了Base來將一個較長的唯一標識符(一般為-bit的UUID)編碼為一個字元串,用作HTTP表單和HTTP GET URL中的參數。在其他應用程序中,也常常需要把二進制數據編碼為適合放在URL(包括隱藏表單域)中的形式。此時,採用Base編碼具有不可讀性,即所編碼的數據不會被人用肉眼所直接看到。
第二種. MD
MD即Message-Digest Algorithm (信息-摘要演算法),用於確保信息傳輸完整一致。是計算機廣泛使用的雜湊演算法之一(又譯摘要演算法、哈希演算法),主流編程語言普遍已有MD實現。將數據(如漢字)運算為另一固定長度值,是雜湊演算法的基礎原理,MD的前身有MD、MD和MD。
MD演算法具有以下特點:
壓縮性:任意長度的數據,算出的MD值長度都是固定的。
容易計算:從原數據計算出MD值很容易。
抗修改性:對原數據進行任何改動,哪怕只修改個位元組,所得到的MD值都有很大區別。
弱抗碰撞:已知原數據和其MD值,想找到一個具有相同MD值的數據(即偽造數據)是非常困難的。
強抗碰撞:想找到兩個不同的數據,使它們具有相同的MD值,是非常困難的。
MD的作用是讓大容量信息在用數字簽名軟體簽署私人密鑰前被」壓縮」成一種保密的格式(就是把一個任意長度的位元組串變換成一定長的十六進制數字串)。除了MD以外,其中比較有名的還有sha-、RIPEMD以及Haval等。
第三種.SHA
安全哈希演算法(Secure Hash Algorithm)主要適用於數字簽名標准(Digital Signature Standard DSS)裡面定義的數字簽名演算法(Digital Signature Algorithm DSA)。對於長度小於^位的消息,SHA會產生一個位的消息摘要。該演算法經過加密專家多年來的發展和改進已日益完善,並被廣泛使用。該演算法的思想是接收一段明文,然後以一種不可逆的方式將它轉換成一段(通常更小)密文,也可以簡單的理解為取一串輸入碼(稱為預映射或信息),並把它們轉化為長度較短、位數固定的輸出序列即散列值(也稱為信息摘要或信息認證代碼)的過程。散列函數值可以說是對明文的一種「指紋」或是「摘要」所以對散列值的數字簽名就可以視為對此明文的數字簽名。
SHA-與MD的比較
因為二者均由MD導出,SHA-和MD彼此很相似。相應的,他們的強度和其他特性也是相似,但還有以下幾點不同:
對強行攻擊的安全性:最顯著和最重要的區別是SHA-摘要比MD摘要長 位。使用強行技術,產生任何一個報文使其摘要等於給定報摘要的難度對MD是^數量級的操作,而對SHA-則是^數量級的操作。這樣,SHA-對強行攻擊有更大的強度。
對密碼分析的安全性:由於MD的設計,易受密碼分析的攻擊,SHA-顯得不易受這樣的攻擊。
速度:在相同的硬體上,SHA-的運行速度比MD慢。
第四種.HMAC
HMAC(Hash Message Authentication Code,散列消息鑒別碼,基於密鑰的Hash演算法的認證協議。消息鑒別碼實現鑒別的原理是,用公開函數和密鑰產生一個固定長度的值作為認證標識,用這個標識鑒別消息的完整性。使用一個密鑰生成一個固定大小的小數據塊,即MAC,並將其加入到消息中,然後傳輸。接收方利用與發送方共享的密鑰進行鑒別認證等。
㈢ java 中 url地址欄里傳的數字值,如何加密
現在很多加密演算法的 比如你可以使用XXTea加密。前端使用post請求,請求之前將專你要傳的參數 組合成一屬個json格式,之後進行XXTea加密,加密完之後 將加密得到的字元串放到post 請求數據中。後台加一個攔截器,拿到你的請求地址以及加密字元串,然後將字元串解密 得到一個map,再通過request得到的ParamRequestWrapper 將解密後的參數放回去,這樣你的方法就可以照常拿到數據了。
㈣ JAVA如何對URL進行加密和解密啊
URLDecoder和URLEncoder應該是不行的,程序員輕易的就能解碼修改參數後重新編碼。
比較合適的就是版RSA加密了,只要兩個權伺服器共用一個密鑰,一個加密,另一個收到後再用密鑰解密就行。因為是整數加密,所以在沒有證書的情況下基本無法解密的。
des加密也是不錯的選擇,比RSA簡單。
如果有能力也可以自己寫一個簡單的加密方法。
㈤ java項目如何加密
Java基本的單向加密演算法:
1.BASE64 嚴格地說,屬於編碼格式,而非加密演算法
2.MD5(Message Digest algorithm 5,信息摘要演算法)
3.SHA(Secure Hash Algorithm,安全散列演算法)
4.HMAC(Hash Message Authentication Code,散列消息鑒別碼)
按 照RFC2045的定義,Base64被定義為:Base64內容傳送編碼被設計用來把任意序列的8位位元組描述為一種不易被人直接識別的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)
常見於郵件、http加密,截取http信息,你就會發現登錄操作的用戶名、密碼欄位通過BASE64加密的。
主要就是BASE64Encoder、BASE64Decoder兩個類,我們只需要知道使用對應的方法即可。另,BASE加密後產生的位元組位數是8的倍數,如果不夠位數以=符號填充。
MD5
MD5 -- message-digest algorithm 5 (信息-摘要演算法)縮寫,廣泛用於加密和解密技術,常用於文件校驗。校驗?不管文件多大,經過MD5後都能生成唯一的MD5值。好比現在的ISO校驗,都 是MD5校驗。怎麼用?當然是把ISO經過MD5後產生MD5的值。一般下載linux-ISO的朋友都見過下載鏈接旁邊放著MD5的串。就是用來驗證文 件是否一致的。
HMAC
HMAC(Hash Message Authentication Code,散列消息鑒別碼,基於密鑰的Hash演算法的認證協議。消息鑒別碼實現鑒別的原理是,用公開函數和密鑰產生一個固定長度的值作為認證標識,用這個 標識鑒別消息的完整性。使用一個密鑰生成一個固定大小的小數據塊,即MAC,並將其加入到消息中,然後傳輸。接收方利用與發送方共享的密鑰進行鑒別認證 等。
㈥ java如何給URL進行加密啊
url是直接顯示復在地址欄中的,這制個無法加密,但是可以用https安全套接字,安裝服務端證書。如果你不想別人看到某個地址,你可以用request.setRequestDispacher("*/.jsp").forword(request,response);我不知道拼對沒有,自己多網上搜下。
㈦ java md5加密 index頁面代碼
/**
*將指定byte數組轉換成16進制字元串
*@paramb
*@return
*/
(byte[]b){
StringBufferhexString=newStringBuffer();
for(inti=0;i<b.length;i++){
Stringhex=Integer.toHexString(b[i]&0xFF);
if(hex.length()==1){
hex='0'+hex;
}
hexString.append(hex.toUpperCase());
}
returnhexString.toString();
}
/**
*獲得加密後的16進制形式口令
*@parampassword
*@return
*@
*@
*/
(Stringpassword)
,UnsupportedEncodingException{
//聲明加密後的口令數組變數
byte[]pwd=null;
//隨機數生成器
SecureRandomrandom=newSecureRandom();
//聲明鹽數組變數
byte[]salt=newbyte[SALT_LENGTH];
//將隨機數放入鹽變數中
random.nextBytes(salt);
//聲明消息摘要對象
MessageDigestmd=null;
//創建消息摘要
md=MessageDigest.getInstance("MD5");
//將鹽數據傳入消息摘要對象
md.update(salt);
//將口令的數據傳給消息摘要對象
md.update(password.getBytes("UTF-8"));
//獲得消息摘要的位元組數組
byte[]digest=md.digest();
//因為要在口令的位元組數組中存放鹽,所以加上鹽的位元組長度
pwd=newbyte[digest.length+SALT_LENGTH];
//將鹽的位元組拷貝到生成的加密口令位元組數組的前12個位元組,以便在驗證口令時取出鹽
System.array(salt,0,pwd,0,SALT_LENGTH);
//將消息摘要拷貝到加密口令位元組數組從第13個位元組開始的位元組
System.array(digest,0,pwd,SALT_LENGTH,digest.length);
//將位元組數組格式加密後的口令轉化為16進制字元串格式的口令
returnbyteToHexString(pwd);
}
publicstaticvoidmain(String[]args){//測試方法
try{
System.out.println(getEncryptedPwd("123456"));
}catch(NoSuchAlgorithmExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(UnsupportedEncodingExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
在jsp頁面中可以調用getEncryptedPwd方法