JavaScript RSA 非对称加密

使用 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 加密解密。

你可能感兴趣的:(php学习)