2010-03-29 4 views
1

내가 자바 스크립트에서 동일한 문자열을 얻을 어려움을 겪고 그리고 난 내가 뭔가를 잘못하고 있어요 것을 생각하고 ...자바 (암호화 관련) 자바 스크립트

자바 코드 :

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; 
} 

나뿐만 아니라 Farhadi Base 64 Encode script

Paul's MD5 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), 3,740일 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 기능을 얻으십시오 (google의 'javascript md5'에 대한 첫 번째 페이지) http://www.webtoolkit.info/javascript-base64.html <는 -/드 코드 엉 64 기수를 얻을 수 (인터넷 검색 '자바 스크립트 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; 
} 

... 당신이 원하는 모든 base64로의 endocde 데이터를 운반하는 경우, 두 번째 링크를 봐주세요. 당신이 원하는대로 할 수 있습니다.

UPDATE :

당신은 다음과 같은 일을 할 그 여분의 바이트는 3 개 문자를 대체 할 수 가정 할 수 있어야한다.

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

(1)은 자바 스크립트에 어떠한 타입 바이트 (2) 그 3 선 부호화/암호화 될 문자열 3 개 바이트 값을 추가하는되어 있지 않다. – balexandre

+0

데이터를 전송하고 싶지만 먼저 전달 된 문자열에 MD5 암호화를 적용하고 싶습니다. – balexandre

+0

@balexandre 그들이하는 일을 알고 있습니다. JS에서 해당 작업을 수행하는 방법을 알지 못합니다. – thecoshman