2013-10-24 65 views
2

我是加密的新手。我想在發送到服務器之前使用JavaScript RSA庫簽署一段數據。JavaScript中的RSA簽名

我正在嘗試使用JavaScript庫jsrsasign:http://kjur.github.io/jsrsasign/來簽署數據。

我已經生成了一個模數(n),公開指數(e)和一個私有指數(d)並試圖讓它們簽署數據。

var privateExponent = "4B48F60D02460811DABF74D79770E8DD72B5EEFF1324F651D4543D98B8C9F0F7ED3E245C49D967A30B279564AFF4FE53E2D92704FB4D6E923732F4AF8CFDA2114A49B6E425FD44AEACB80F00125AF6468F1A666EDDD5CFD6BFAB27950EF3DFB78671734BF1BB782CBB654A7FBB9BFB897E37F0324710360E1515B1FF0EE7FAF1"; 

var modulus = "00A68A945DE1175E4EBA23C53B8A1237CE9AA292020ECB373D90837FBD8DB8164687B7913543EA838E2B669BD1626FA9872397C5398485D951CFC229E102A78654B61E9EB2BC3B36BD2624ACF5C8B82ABD33A5AF4144C55034A3E5BF8282F3D5CB0CF9F550844E68A58DADC3BCC7CF726F227F8EC5FAC2494F1FBDEEF39212B5FF"; 

var publicExponent = "10001"; 

我一直在嘗試使用它們如下籤署了一塊數據:

var signature = "Hello world"; 
var rsa = new RSAKey(); 
rsa.setPrivate(modulus, publicExponent, privateExponent); 

var result = rsa.signString(signature, 'sha256'); 
rsa.setPublic(modulus, publicExponent); 

console.log(result); 
console.log(rsa.verifyString(result, 'sha256')); 

但是驗證功能保持返回false。我不知道我做錯了什麼。

功能setPublic和setPrivate是部分rsa2.js

回答

1

有一個在verifyString呼叫錯誤。該API說:

verifyString(sMsg, hSig) 
    verifies a sigature for a message string with RSA public key. 
    Parameters: 
    {String} sMsg 
     message string to be verified. 
    {String} hSig 
     hexadecimal string of siganture. 
     non-hexadecimal charactors including new lines will be ignored. 

    Returns: 
     returns 1 if valid, otherwise 0 

這意味着你需要調用的代碼是:

rsa.verifyString(signature, result) 

但是變量名是混亂。 result var實際上是簽名。

signString函數使用PCSK#1 v1.5填充,因此您不需要將摘要算法傳遞給驗證函數。這些信息已經出現在簽名中。