入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

JavaScript RSA 非对称加密

创建时间:2016-11-27 投稿人: 浏览次数:4454

使用 JSEncrypt 完成 JavaScript 非对称加密。

假定整个加解密过程中使用的密钥如下。

公钥:

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5A/TPEmOQYgT2po11qvjeBUPE
dqUEz1Z7MeHH7KI2p74pYK8RsvYngy1cH/wnMXmsf+Wb3tmlqNGa7atW8wlpSfXX
QV9bFECPEVRnESo8xtN7ZAlJFcdRvBVgfVwC3m9HWpVvKnd9NREXIcg5NHh57q7u
lsGCZJ2VOJm9EIgFEwIDAQAB
-----END PUBLIC KEY-----

私钥:

-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQC5A/TPEmOQYgT2po11qvjeBUPEdqUEz1Z7MeHH7KI2p74pYK8R
svYngy1cH/wnMXmsf+Wb3tmlqNGa7atW8wlpSfXXQV9bFECPEVRnESo8xtN7ZAlJ
FcdRvBVgfVwC3m9HWpVvKnd9NREXIcg5NHh57q7ulsGCZJ2VOJm9EIgFEwIDAQAB
AoGBALcfBVVXHBiyC7udSfInET+e8l4oGFjUZwJ0csaQnlV+XadSvLTF7wFYwrKm
LcsVGxrzU+2c+ssOdrfjeW0MDEjrbd1xtmayP8Kh2/Pg+9jZqj188tTlLwzUW6iz
KDEpiG5P1f1cbKY+R/BHQIKt7vcd2QMNVctxSkjl1uSvU/ERAkEA7uCuAJsVgmui
NjDscoXyj+QRFWqDnUNCZqSqjYw7/BC36xYg/Xolw/bqg9aTgua96fv9k9hExOBY
eNV3mj63bwJBAMZG7J5/vc3bkVwOS3A5E8j4hwCIFDylbKQ8chdulC3wwDLaSRdE
evUfhAmMev1cc4QiVaXzGKPcS9ko8Gdz2p0CQAftfvjYLMOSTOTdhMtcNKuf1w1N
5qZOeCKt7lcaQ1dfOqtbpaaj6iLxy+CqO2UJwV3FlinU8JtUEruX4gtFb5MCQGgb
l2RFuHhdgH5wdwXOwme0rtYFnXKWfWvi3RkWk7FnhtNssBIKf/EzAhYtb+qWX4US
rhv7f4WSRzUX/NqlBzUCQQCfDpC5/DZ/7RMKbDj7inW2G/3T56jzCdicIAgN0erZ
jcbB7+8VQLjcw5LFYPwgjjz5v6Amw42VY+dBUNWVEH9C
-----END RSA PRIVATE KEY-----

JSEncrypt 使用私钥加密示例:

1 2 3 4 5 6 7 8 9 // 创建 RSA 对象 var crypt = new JSEncrypt();   // 私钥 var private_key = "-----BEGIN RSA PRIVATE KEY-----...";   crypt.setPrivateKey(private_key);   var encrypted = crypt.encrypt("123456");

得到结果:

bC8nemetJfmenSldUccrHcY+aMVBO1ANYJky42vKhv+8iMmecAmDSalOj/065+AZBRhsWuT0C26A5IJTnI9COpA3L1xV54Mwz8j3Y0DdGRqaAFH+lkibVj/JOsTYfKVWnPMwc0D/EL2IJdi18sct2s3CvGxp7+1sRayKSoPvTa8=

RSA 加密得到的密文每次都不一样, 因为加入了随机数。

JSEncrypt 使用公钥解密示例:

1 2 3 4 5 6 var crypt = new JSEncrypt(); var private_key = "-----BEGIN RSA PRIVATE KEY-----...";   crypt.setPrivateKey(private_key);   var decrypted = crypt.decrypt("123456");

PHP 使用私钥加密示例:

1 openssl_pkey_new(array("private_key_bits" => 1024));

PHP 使用公钥加密示例:

1 openssl_pkey_new(array("private_key_bits" => 1024));

JSEncrypt 同时支持自动创建公钥和私钥:

1 2 3 4 5 6 7 8 9 // 支持 512、1024、2048、4096 // key 越长, 生成密钥和加密时间越长 var crypt = new JSEncrypt({default_key_size: 1024});   // 获取公钥 var public_key = crypt.getPublicKey();   // 获取私钥 var private_key = crypt.getPrivateKey();

利用 JSEncrypt 可以完成在前端网页对密码等敏感信息进行加密,传输到服务器端再进行解密。

JSEncrypt 项目地址:https://github.com/travist/jsencrypt。

在 JSEncrypt 基础上实现的在线工具 —— RSA 加密解密。

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。