RSA加密算法
维基百科: RSA非对称加密算法 大整数因数分解的难度决定了 RSA 算法的可靠性。换句话说,分解一个大整数的因数越难,RSA 算法越可靠。如果有人找到了快速因数分解的算法,那就用吧 RSA 加密信息的可靠性将大大降低。但是找到这种算法的可能性很小。今天只有短 RSA 强大的方式可以破解钥匙。到2020年,世界上还没有可靠的攻击RSA算法的方式。只要钥匙的长度足够长,使用RSA事实上,加密信息是无法破解的。
npm三方库
https://github.com/travist/jsencrypt
浏览互联网搜索时 RSA Javascript 在良好的加密解决方案中,基本采用了大量的库 Tom Wu @ http://www-cs-students.stanford.edu/~tjw/jsbn 优秀工作/做好工作/ 然后修改代码以执行他们想要的操作。
demo
2048位生成的公钥
import JSEncrypt from 'jsencrypt'; const encryptor = new JSEncrypt(); const pubKey = '-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArBYpsjeeE7RG8XBsCbxf Ra38w/ktBkqQvwDdkYCNt4M6w24AiEgIKRHeKti4abEf xRESWmKADkaeiX2lX4D 1R2TiTtFAEpOsubfcndJD1hEYYM9MBjya9nS 6OtZV40R3emevXUbjyQsmCWN2Pc M3dPvawRDgRj BEtTHSY7VORhDTcvWfKWgvkc98IGxPVbCB2XEwwBBfRSUapl/pp lhkefnfPZutv SOXbGFYdImAeJozQYfVeMBdHlTvJP7nFvowCuM5YkCLq7X8L6cX 1FiaoEzM7oXia3tkrtUnCH4ar1tHjQbZnXn4m63gtEKnEgFsKo1IWDdAK4dXCMO/ 8wIDAQAB -----END PUBLIC KEY-----'; encryptor.setPublicKey(pubKey); const enPassword = encryptor.encrypt(password)
到目前为止,前端密码已经加密了几句话,因为如果是登录场景,前端只需要加密;解密验证由后端完成
扩展前端解密
因为有些场景需要解密,解密demo以下:(2048位)
const decrypt = new JSEncrypt()////创建解密对象实例 //之前ssl生成的秘钥 const priKey = '-----BEGIN PRIVATE KEY----- MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCsFimyN54TtEbx cGwJvF9FrfzD S0GSpC/AN2RgI23gzrDbgCISAgpEd4q2LhpsR/7FERJaYoAORp6 JfaVfgPVHZOJO0UASk6y5t9yd0kPWERhgz0wGPJr2dL7o61lXjRHd6Z69dRuPJCy YJY3Y9wzd0 9rBEOBGP4ES1MdJjtU5GENNy9Z8paC Rz3wbE9VsIHZcTDAEF9FJ
RqmX+mmWGR5+d89m62/5I5dsYVh0iYB4mjNBh9V4wF0eVO8k/ucW+jAK4zliQIur
tfwvpxfUWJqgTMzuheJre2Su1ScIfhqvW0eNBtmdefibreC0QqcSAWwqjUhYN0Ar
h1cIw7/zAgMBAAECggEAIJzCoiewKYPMvgzULLQqSgZDFNCwG7Ud4VTEqMJ4GQMh
q8+5AhrEkSP1uqD/segDa43XsyHxKUGpJuTy6jnLeCP2xdcZqIhsibL/Pa4lhmbv
7pr0iZzwtEe/mDjYr5E+zxx5zGuyKoIH2gY78ZtXK9m8nvFw+fsTBvwaXZbrNG6G
Y07mvBM10Pv0Qg1w2H7SDuetAnIIaCJuafzPWgy0iEheW9cZQIMwCiVWXg8DzkCz
s3sJQaKIsTmWpj6a0O8rsu2uE+Ka5lJa7XmUV3jpeIkSCT/TZ28bCzLxduGC9YCc
3GMcitsAHTccQcpXyXU0r/tpkrnJpXzA0sAVFwk7wQKBgQDSKi6XEcArwwVncXA8
a948HFOKu+tSAbUTekS4gir3pi5dPhoaKIKTvyYSVNzw2/5907DYweRBfjxWBqy4
d39+jZtaqbMnCaKK8spCJGY7T0b1iyOU8n8hhKX04EXmvxGP9few0Q0LBKql9Css
2STTYkSI+YccnVo2qqJi5kLlawKBgQDRngRqi7UaF7CNYA7uhRXi5uQsI6ehh89a
3N/yGRtomah+tjx1hQ7mAqO5Sy7zUYuMFKd2bzx4ci7Hh1kKvhx1RdFACN9MSasW
FG1hJMlK+EdD6VfJxGepMRQAN7OSlwQdS6bY0ReCaSvMflDKCdgILmAaDr0ybFLj
wLCvZD+pmQKBgEkWIEOrCaBuXse9fGGWxZ8z3p2lgk1viJAweguMQPMEmKUWfq9Q
HTDSTaQcXQVqDBOn9Z07uGxKQSNNiO1RqUXSaw9ZapMN17fofQwJan//rtafP42B
01JNtgT1pXl8QthEmpGj8Zw+UDYMNqOPFC5qwxi7ZhA+bGwMZRJtrx/nAoGAP9Gd
RJcOZ0hJH3HcefAY7sEfPPUKB1ri3aYbpIjSWHFX5GQ1Wg5Nr+ej0zk5rSjplJeB
OMS7I2yYI3VovaWN4oKEJ7vLyF0xcoJ7nrTleCbJA7saWDqs2M0xarOKv5mszgKH
ZMGcJ78/b34RuMFwfWUpKyXLontqbR7wbCXYYBkCgYAK73A22eTephw8TCFnkjSG
i1pO7jgwv+WxJuAYX01bnNUo9CjD51XslpfS+WNC8AHWqFLJGesBhYjI2yo9D6QK
vKGjlJuJNMpVkU1rC9cAlBBvPY+fO/IfQWiXpQvsSiW8NoKbpTQP15JZjYSY9LvC
SD+EmtReFQlIr3vE87gYnw==
-----END PRIVATE KEY-----'
decrypt.setPrivateKey(priKey)//设置秘钥
const uncrypted = decrypt.decrypt(encrypted)//解密之前拿公钥加密的内容