2015-01-21 2 views
1

일반 텍스트를 암호화하는 데 문제가 있습니다.파이썬과 자바 스크립트에서 SHA256 해시를 생성하면 다른 결과가 발생합니다

내가 뭘 파이썬에서 뭐하는 거지 :

def encrypt(plaintext): 
    import hashlib, base64 

    hashed = hashlib.sha256(plaintext).digest() 
    return base64.b64encode(hashed) 

def main(): 
    input_value = "a" 
    output = encrypt(plaintext=input_value) 
    print output 

if __name__ == "__main__": 
    main() 

결과를 파이썬 :

ypeBEsobvcr6wjGzmiPcTaeG7/gUfE5yuYB3ha/uSLs= 

내가 JS에서 뭐하는 거지 :

var result = ''; 
var plaintext = 'a'; 

if(plaintext != null && plaintext != undefined) { 
    var hashed = CryptoJS.SHA256(plaintext); 
    result = hashed.toString(CryptoJS.Base64); 
} 

alert(result); 

결과 JS에서 :

ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb 

누구나 내가 뭘 잘못하고 있는지 아이디어가 있습니까?

두 언어로 동일한 암호화 결과를 얻는 방법이 있습니까?

덧붙여서 : 나는 이미 데이터베이스에 CryptoJS로 암호화 된 값을 가지고 있기 때문에 파이썬 코드를 변경하는 것이 더 쉬울 것입니다.

+0

의견을 보내 주셔서 감사합니다. 그것은 단순히 내 코드에서 복사 및 붙여 넣기 오류가 발생했습니다. "output = encrypt (plaintext = input_value)"이어야합니다. – gimlithedwarf

답변

1

대부분 CryptoJS는 오류를 발생시키지 않습니다. undefinedhashed.toString(CryptoJS.Base64);에 전달 중입니다. CryptoJS.enc.Hex이 기본적으로 사용되므로 CryptoJS.enc.Base64을 사용하십시오.

하지만 파이썬을 변경하는 것을 선호하기 때문에, 나는 해시 this way 할 제안 : 당신은 여전히 ​​CryptoJS 기본 동작을 변경하는 경우 16 진수 인코딩에 자바 스크립트 코드를 변경해야

def encrypt(plaintext): 
    import hashlib, base64 
    return hashlib.sha256(plaintext).hexdigest() 

합니다.

+0

또는 파이썬 코드를 변경하기를 원했기 때문에 ['.hexdigest()'] (https://docs.python.org/)를 사용할 수 있습니다. 2/library/hashlib.html # hashlib.hash.hexdigest). base64 인코딩은 수행하지 않습니다. – Reid

+0

감사합니다. 답변을 게시 한 후에 만 ​​문장을 보았습니다. –

+0

답변 해 주셔서 감사합니다. 그것은 나를 많이 도왔다! 이제 데이터베이스를 패치하거나 파이썬 코드를 변경할지 결정해야합니다. 무엇을 권하고 싶습니까? – gimlithedwarf

관련 문제