4

平文の暗号化に問題があります。

私がPythonでやっていること:

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()

Python での結果:

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 で暗号化された値があるので、Python コードを変更する方が簡単です。

4

1 に答える 1

5

CryptoJS はほとんどの場合、エラーをスローしません。あなたは に渡っundefinedていhashed.toString(CryptoJS.Base64);ます。デフォルトで が使用されるCryptoJS.enc.Base64ため、CryptoJS.enc.Hexを使用します。

しかし、あなたはPythonを変更したいので、この方法でハッシュを行うことをお勧めします:

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

CryptoJS がデフォルトの動作を変更した場合に備えて、JavaScript コードを 16 進エンコーディングに変更する必要があります。

于 2015-01-21T16:53:11.600 に答える