2014-04-18 9 views
0

내 앱과 백엔드간에 암호화 된 데이터를 전송하기 위해 SHA512 해시를 사용하고 있습니다. 그러나 나는 이상한 상황을 겪고 있으며 그 원인을 알 수 없습니다.SHA512 해시는 안드로이드, PHP 및 자바 스크립트가 다릅니다

그래서, 내가있어 다음과 같은 설정 테스트 :

안드로이드 배 SHA512

안드로이드 1X SHA512 -> CryptoJS 1 배 SHA512

PHP 배 SHA512

그래서, 내가 할 때 처음 2 배 안드로이드 해싱, 나는 1x android -> 1x cryptojs 할 때와 같은 결과를 얻는다. 그러나 PHP 2x를 실행하면 첫 번째 Android 패스를 사용하는 것과 같은 결과를 얻지 만 PHP의 두 번째 암호화 패스는 다릅니다.

PHP에서 해시() 및 openssl_digest() 함수를 원시 바이트로 출력하려고 시도했습니다.

PHP :

$firstpass = base64_encode(hash('sha512', $enteredPassword, true)); 
//$firstpass = base64_encode(hash('sha512', $enteredPassword, true)); 

//$secondpass = base64_encode(openssl_digest($firstpass, 'sha512', true)); 
$secondpass = base64_encode(hash('sha512', $firstpass, true)); 

안드로이드 :

public static String encryptPassword(String password) { 
    MessageDigest md = null; 
    try { 
     md = MessageDigest.getInstance("SHA-512"); 
    } catch (NoSuchAlgorithmException e) { 
     e.printStackTrace(); 
    } 
    if (md != null) { 
     md.update(password.getBytes()); 
     byte byteData[] = md.digest(); 
     String base64 = Base64.encodeToString(byteData, Base64.DEFAULT); 

     return base64; 
    } 
    return password; 
} 

CryptoJS :

var password = cryptojs.SHA512(req.params.password); 
var basepassword = password.toString(cryptojs.enc.Base64); 

왜 내 첫 번째 해시 정확하고 나의 두번째하지 나는이 문제를 어떻게 해결할 수있는 것인가?

답변

0

보안을 위해 SHA1을 만들지 않으므로이 용도로 사용하지 마십시오. BCrypt를 구현하고 보안을 강화하십시오. 다른 해시 : 대부분 문자열과 관련된 인코딩 문제 일 수 있습니다.

+0

나는 이들을 일치시킬 수없는 이유를 알아 내려고 노력하고 있지만 BCrypt도 점검 할 것입니다. 2 배 안드로이드와 안드로이드 -> CryptoJS는 base64 문자열에 줄 바꿈이 있음을 알았지 만 PHP 버전은 base64에 개행 문자가 없었습니다. S – Myth1c

+0

그렇다면 인코딩과 너무 멀리 떨어져 있지 않았습니다.) – meredrica

+0

그래,하지만 나는 PHP가 왜 개행 문자를 가지지 않는지 아직 모른다. ( – Myth1c