2010-03-29 48 views
1

我有困難,可以在javascript相同的字符串,我認爲我做錯了什麼......的Java與JavaScript(加密相關)

Java代碼:

import java.io.UnsupportedEncodingException; 
import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException; 
import java.util.Date; 
import java.util.GregorianCalendar; 

import sun.misc.BASE64Encoder; 

private static String getBase64Code(String input) throws 
     UnsupportedEncodingException, NoSuchAlgorithmException { 

    String base64 = ""; 

    byte[] txt = input.getBytes("UTF8"); 
    byte[] text = new byte[txt.length+3]; 

    text[0] = (byte)239; 
    text[1] = (byte)187; 
    text[2] = (byte)191; 

    for(int i=0; i<txt.length; i++) 
     text[i+3] = txt[i]; 

    MessageDigest md = MessageDigest.getInstance("MD5"); 
    md.update(text); 
    byte digest[] = md.digest(); 

    BASE64Encoder encoder = new BASE64Encoder(); 
    base64 = encoder.encode(digest); 

    return base64; 
} 

我想這個使用Paul's MD5 script以及Farhadi Base 64 Encode script

,但我的測試中完全失敗:(

我的代碼:

function CalculateCredentialsSecret(type, user, pwd) { 

var days = days_between(new Date(), new Date(2000, 1, 1)); 
var str = type.toUpperCase() + user.toUpperCase() + pwd.toUpperCase() + days; 
    var padding_data = String.fromCharCode(239) + 
         String.fromCharCode(187) + 
         String.fromCharCode(191); 

var md5 = hex_md5(padding_data + str); 
var b64 = base64Encode(md5); 

return encodeURIComponent(b64); 
} 

有誰知道我該如何將這個轉換成Java的方法?

謝謝


測試(今日(29-09-2010),3740天 1月1日以後,2000年)

var secret = CalculateCredentialsSecret('AAA', 'BBB', 'CCC'); 

// secret SHOULD be: S3GYAfGWlmrhuoNsIJF94w== 

回答

0

正確的代碼是

function CalculateCredentialsSecret(type, user, pwd) { 

var days = days_between(new Date(), new Date(2000, 1, 1)) + 30; 
var str = type.toUpperCase() + user.toUpperCase() + pwd.toUpperCase() + days; 

var padding_data = String.fromCharCode(239, 187, 191); 

var md5 = rstr_md5(padding_data+str); 
var b64 = base64Encode(md5); 

return encodeURIComponent(b64); 
} 
0

http://pajhome.org.uk/crypt/md5/ < - 從那裏獲得Md5功能(谷歌首頁爲'javascript md5') http://www.webtoolkit.info/javascript-base64.html < - 得到的base64 EN/DE代碼(用Google搜索「JavaScript的使用Base64編碼」)

function getBase64Code(input) 
{ 
    base64 = ""; 
    txt = input 
    text = []; 
    text[0] = (byte)239; // These three lines I am stuck on 
    text[1] = (byte)187; // These three lines I am stuck on 
    text[2] = (byte)191; // These three lines I am stuck on 

    for(int i=0; i<txt.length; i++) 
    { 
    text[i+3] = txt[i]; 
    } 
    digest = hex_md5(text); 
    base64 = Base64(digest); 
    return base64; 
} 

剛剛意識到......如果你想要做的是endocde用base64用於傳輸數據,看一下第二個鏈接。可以做你想做的事情。

UPDATE:

,你應該能夠做這樣的事情的話,承擔這些額外的字節可以替換三個字符。

encoded = Base64.encode(hexmd5(padding_data + data)); 
+0

(1)在JavaScript沒有類型字節 (2)的那些3線是3個字節值添加到字符串進行加密/編碼。 – balexandre 2010-03-29 10:22:55

+0

我想傳輸數據,但是我想先對傳遞的字符串應用MD5加密 – balexandre 2010-03-29 10:23:44

+0

@balexandre我知道他們在做什麼,我只是不知道如何做JS中的等價物。 – thecoshman 2010-03-29 10:27:00