使用 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 使用私钥加密示例:
// 创建 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 使用公钥解密示例:
var crypt = new JSEncrypt(); var private_key = "-----BEGIN RSA PRIVATE KEY-----..."; crypt.setPrivateKey(private_key); var decrypted = crypt.decrypt('123456');
PHP 使用私钥加密示例:
openssl_pkey_new(array('private_key_bits' => 1024));
PHP 使用公钥加密示例:
openssl_pkey_new(array('private_key_bits' => 1024));
JSEncrypt 同时支持自动创建公钥和私钥:
// 支持 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 加密解密。