2012-04-04 2 views
4

비누 webservice 인증을 시도하고 있지만 java에서 생성 한 SHA1 해시는 작동하지 않지만 .Net으로 생성 된 해시는 작동합니다..Net에서 생성되는 SHA1 해시에 해당하는 Java는 무엇입니까?

이 .Net 코드에 해당하는 Java는 무엇입니까?

//.Net

var token = "H?OIgSJ35~LKJ:9~~7&sUtHDeKAv*[email protected]?cEwV[}[email protected]%}"; 
var shaProvider = new SHA1Managed(); 
var rawKey = Encoding.Unicode.GetBytes(token); 
var rawHash = shaProvider.ComputeHash(rawKey); 
var signature = BitConverter.ToString(rawHash).Replace("-", "").ToLower(); 

해시 제작 : a508a29efeea2821e519fcbf64f164dd5d672233

// 자바 - 이것은 내가

String token = "H?OIgSJ35~LKJ:9~~7&sUtHDeKAv*[email protected]?cEwV[}[email protected]%}"; 
MessageDigest cript = null; 
try { 
    cript = MessageDigest.getInstance("SHA1"); 
} catch (NoSuchAlgorithmException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
cript.reset(); 
cript.update(token.getBytes()); 
String password = new String(Hex.encodeHex(cript.digest())); 
System.out.println(password); 

해시 생산 평민 - 코덱 - 1.4.jar를 사용하여 시도 것입니다 : 88e7c8fc13ac75e8efc8d0c00182caa6dc087093

+0

해당 블록은 어떤 문자열을 생성합니까? – alberge

+0

'Encoding.Unicode.GetBytes'는'String.getBytes'와는 다른 인코딩을 가지고있는 것처럼 보입니다. 이 두 출력을 비교해 보셨습니까? 'token.getBytes ("UTF-16LE")'을 시도하십시오. –

+0

@alberge, 내 편집에 추가했습니다. – Ram

답변

4

내 생각 엔 token.getBytes()은 기본 인코딩으로 UTF-16 Little Endian을 사용하지 않으므로 Encoding.Unicode.GetBytes(token)과 동일한 인코딩을 사용하지 않습니다. 이 번호를 token.getBytes(StandardCharsets.UTF_16LE)으로 변경하면 어떻게됩니까?

+0

어디서 StandardCharsets.UTF_16LE을 찾을 수 있습니까? rt.jar에서 찾을 수 있습니다. sun.nio.cs.StandardCharsets이지만 UTF_16LE이 없습니다. – Ram

+1

@Mohan [java.nio.charset.StandardCharsets] (http://docs.oracle.com/javase/7 /docs/api/java/nio/charset/StandardCharsets.html) –

+0

@Banthar가 답장을 보내 주셔서 감사하지만 rt.jar에서 찾을 수 없습니다. 그것을 담고있는 항아리는 무엇입니까? – Ram

관련 문제