返回列表

Javascript加密字符串 - RSA算法简介

默认分类 2018/09/11 02:11

在处理登录信息加密时遇到一个小问题, 需要将发送信息加密, 于是找了一下相关资料, 整理如下.

1.Base64
适用于传输容易被墙的信息
2.AES
由于密码需要放在客户端, 所以暂不考虑
3.RSA
支持公钥和私钥, 比较适传输加密信息, 1024位的可能3年后会被破解, 推荐2048位, 只是JS加密时间比较长, 9s左右

下面介绍一下RSA算法
1. wiki上关于RSA算法的介绍http://zh.wikipedia.org/wiki/RSA%E5%8A%A0%E5%AF%86%E6%BC%94%E7%AE%97%E6%B3%95不明白的地方可以参照下面的ppt
2. 介绍RSA算法原理的PPT,感谢作者看完后疑惑顿解.http://cis.sjtu.edu.cn/personal/wanglibin/sec/sec-chap07.ppt 或 http://haiyang.me/rsa/sec-chap07.ppt 3. 从下面这个地址http://bbs.pediy.com/showthread.php?t=130896可以大概了解RSA的安全情况
4. RSA位数介绍http://en.wikipedia.org/wiki/RSA_numbers
5. Javascript实现RSA算法http://www.ohdave.com/rsa/,缺点是未使用OO,不方便调用,过两天抽空改造一下
6. 项目实现http://sunxboy.iteye.com/blog/209156,未提供示例项目打包下载

RSA Example

1. Select primes: p=17 & q=11
2. Compute n = pq =17×11=187
3. Compute ø(n)=(p–1)(q-1)=16×10=160
4. Select e : gcd(e,160)=1; choose e=7
5. Determine d: de=1 mod 160 and d < 160 Value is d=23 since 23×7=161= 10×160+1
6. Publish public key KU={7,187}
7. Keep secret private key KR={23,17,11}

Sample RSA encryption/decryption is:

given message M = 88 (nb. 88<187)
encryption:
C = 887 mod 187 = 11
decryption:
M = 1123 mod 187 = 88 

Javascript示例:原文地址

<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title>JavaScript RSA</title>
    <script type="text/javascript" src="http://www.ohdave.com/BigInt.js"></script></script>
    <script type="text/javascript" src="http://www.ohdave.com/RSA.js"></script></script>
    <script type="text/javascript" src="http://www.ohdave.com/Barrett.js"></script></script>
</head>
<body>
    <script type="text/javascript">
        //公钥加密明文
        setMaxDigits(19);
        var publicKey = "25065286b2627846f19411522364326d";
        var key1 = new RSAKeyPair("10001", "", publicKey);
        var password = "jack1234";
        var encryPssword = encryptedString(key1, password);
        alert(encryPssword);

        //私钥解密
        var privateKey = "d3c495c2580d606089f1cbab136f071";
        var key2 = new RSAKeyPair("10001", privateKey, publicKey);
        var decryptedPssword = decryptedString(key2, encryPssword);
        alert(decryptedPssword);
    </script>
</body>
</html>

示例下载
注:上面只是公钥和私钥使用示例,使用JS生成公钥和私钥的算法还在进一步寻找中。下面是http://www.ohdave.com/rsa/上提供的Delphi公钥私钥生成器。
生成器下载
生成器Delphi源码下载