2015-07-05 15 views
0

我已經得到了JavaScript的這個簡單的一點:JSEncrypt從而爲每個時間相同的消息和公共密鑰不同的輸出

<html> 
    <script type="text/javascript" src="http://cdn.rawgit.com/travist/jsencrypt/v2.1.0/bin/jsencrypt.js"></script> 
    <script type="text/javascript"> 

    var message = "This is my message" 

    // we create a new JSEncrypt object for rsa encryption 
    var rsaEncrypt = new JSEncrypt(); 

    var publicKey = "-----BEGIN PUBLIC KEY-----" + 
     "\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQK" + 
     "BgQCQDxDFOYJpkCaqeX4CBVNCtBjX\nMZgGMo" + 
     "lSs2wYrVu1ixr36KpeJcRcYhz+AnyhnUpYkgk" + 
     "+hEqJtDSNirU5Dk5oVYYi\ngf2uLogV5Tp/ka" + 
     "K49r9vtxldcHraZIgNQjcdeQUd/viKd/3DvM8" + 
     "naWR/mTG0nCBE\nrEQkATW/xXynJh/COQIDAQ" + 
     "AB\n-----END PUBLIC KEY-----" 

    rsaEncrypt.setPublicKey(publicKey); 

    var encryptedMessage = rsaEncrypt.encrypt(message); 

    console.log(encryptedMessage) 
    </script> 
</html> 

,我覺得應該在生產每次運行控制檯相同的輸出,但它沒有。

示例輸出:

abqE+YkCMKFWgsazbZpfGvoXLci9FL/wZLYUMR6ZFkolsvJC5MdJgq5yn+AXXy8xlKHDOry6czAaOQOTl2HXdKSfsypc8nqDU8Sx5PuEgMYjvJ/dEyfU6jVuxfH1Qmuk6aOGVHePNfDlC4kSjgp1RXToSP5NqAEi24EuMx3uulI= 

OzZM03Pki3o631KOuZ5nyQKu1xXRbLHhrR0WnjE5Ns5SssoiCEwlrS+svtP0cbZaYWZJc+FlZQNFUam4iC233BKnY5Nrr5Ppj14eaBvJ4x3FR8FiLwtyEW7nTzisAS7Ys2RKPjUzmkiOCZHwIpXnUO10KVo8763+JIuDB0cDPS4= 

任何人都可以解釋這種現象?

+1

可能會有一些隨機填充。 – jfriend00

回答

1

這是預期的。

RSA密碼系統在模組中以某個素數爲模。爲確保所有可能的明文都使用相同的安全性進行加密,明文會被填充以產生略小於模數的填充明文。由於在加密之前應用填充,所以密文看起來完全不同。

JSEncrypt基於JSBN,而JSBN只實現PKCS#1 v1.5 padding type 2RFC 2313)。這種填充的第二種類型引入了由於標記字節而在解密後被移除的隨機字節。填充需要至少11個字節。

如果你想檢查與其他實現互操作,你需要做一個完整的加密解密週期,並確保你得到相同的明文回來。

注意,現在,PKCS#1 V1.5填充不應再使用和PKCS#1 V.2 OAEP優選其也隨機化。

+0

謝謝Artjom B提供的全面解答。 – thejamesbrown

相關問題