OpenPGP JavaScript crypto library:
Example:
<script type="text/javascript" src="js/rsa.js"></script> <script type="text/javascript" src="js/base64.js"></script> <script type="text/javascript" src="js/hex.js"></script> <script type="text/javascript" src="js/keygen.js"></script> <script type="text/javascript"> /* * Creating a key RSA to 128 bits: */ rsaKeys(128); var n = arrToHex(rsa_pq); // modulus (p*q) var e = arrToHex(rsa_e); // public exponent var d = arrToHex(rsa_d); // private exponent var p = arrToHex(rsa_p); // first prime 'p' var q = arrToHex(rsa_q); // second prime 'q' var u = arrToHex(rsa_u); // 1/Q var mpi = s2r(b2mpi(rsa_pq)+b2mpi(rsa_e)); mpi = mpi.replace(/\n/,''); var pkey = mpi; /*-----------------------------------------------------------* * ENCRYPT: RSA 128 bit * *-----------------------------------------------------------*/ var s = r2s(pkey); var l = Math.floor((s.charCodeAt(0)*256 + s.charCodeAt(1)+7)/8); var mod = new Array(); // modulus (p*q) var exp = new Array(); // public exponent mod = mpi2b(s.substr(0,l+2)); exp = mpi2b(s.substr(l+2)); var plaintext = "test"; var plain = plaintext + String.fromCharCode(1); var b = s2b(plain); /*** encrypt */ var enc = RSAencrypt(b, exp, mod); var ciphertext = s2hex(b2s(enc)); /*-----------------------------------------------------------* * DECRYPT: RSA 128 bit * *-----------------------------------------------------------*/ // da hex ad array p = hexToArr(p); q = hexToArr(q); d = hexToArr(d); u = hexToArr(u); /*** decrypt */ var enc = s2b(hex2s(ciphertext)); var dec = b2s(RSAdecrypt(enc, d, p, q, u)); var plaintext = dec.substr(0, dec.length-1); </script>