前端采用js 实现aes加密、解密功能
通常在api开发中,为了保证数据在一定程度上的安全性,我们需要采用一些加密手段,这篇文章主要介绍下使用ase来进行加密、解密。aes的加密标准用来替代原先的DES,已经被多方分析且广为全世界所使用,AES加密是一种对称加密算法,需要保证客户端和服务端使用的相同秘钥,而且加密的padding和mode 需要两端相对应。
rsa算法:
rsa的公钥私钥是成对的,用其中一个加密只能用另一个解密,常用公钥加密私钥解密。 一开始看到斯坦佛那个库,原始的算法实现:
长度,建议至少1024。模数n(常取默认65537)两边都要用。
指数e,和n一起就是公钥。指数d,和n一起就是私钥。质数p和q用于生成密钥对,然后就丢弃不公开。
1、使用encrypt.js
//公钥
//var PUBLIC_KEY = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlOJu6TyygqxfWT7eLtGDwajtNFOb9I5XRb6khyfD1Yt3YiCgQWMNW649887VGJiGr/L5i2osbl8C9+WJTeucF+S76xFxdU6jE0NQ+Z+zEdhUTooNRaY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4gwQco1KRMDSmXSMkDwIDAQAB';
//私钥
//var PRIVATE_KEY = 'MIICXQIBAAKBgQDlOJu6TyygqxfWT7eLtGDwajtNFOb9I5XRb6khyfD1Yt3YiCgQWMNW649887VGJiGr/L5i2osbl8C9+WJTeucF+S76xFxdU6jE0NQ+Z+zEdhUTooNRaY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4gwQco1KRMDSmXSMkDwIDAQABAoGAfY9LpnuWK5Bs50UVep5c93SJdUi82u7yMx4iHFMc/Z2hfenfYEzu+57fI4fvxTQ//5DbzRR/XKb8ulNv6+CHyPF31xk7YOBfkGI8qjLoq06V+FyBfDSwL8KbLyeHm7KUZnLNQbk8yGLzB3iYKkRHlmUanQGaNMIJziWOkN+N9dECQQD0ONYRNZeuM8zd8XJTSdcIX4a3gy3GGCJxOzv16XHxD03GW6UNLmfPwenKu+cdrQeaqEixrCejXdAFz/7+BSMpAkEA8EaSOeP5Xr3ZrbiKzi6TGMwHMvC7HdJxaBJbVRfApFrE0/mPwmP5rN7QwjrMY+0+AbXcm8mRQyQ1+IGEembsdwJBAN6az8Rv7QnD/YBvi52POIlRSSIMV7SwWvSK4WSMnGb1ZBbhgdg57DXaspcwHsFV7hByQ5BvMtIduHcT14ECfcECQATeaTgjFnqE/lQ22Rk0eGaYO80cc643BXVGafNfd9fcvwBMnk0iGX0XRsOozVt5AzilpsLBYuApa66NcVHJpCECQQDTjI2AQhFc1yRnCU/YgDnSpJVm1nASoRUnU8Jfm3Ozuku7JUXcVpt08DFSceCEX9unCuMcT72rAQlLpdZir876';
var PUBLIC_KEY = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4spQh5cPTRlOFznPOnYW9uyT1nyHtDJTwqipI6mEb5zEC0Y7X5qga0uPRsdhKwmlZxpZFtwAOcj9bi84qbOL5p6760Iyixrp8Sdvcj4/Viug85xNH/IvmpZkiujSVaS6Ng0L7C95PXte82SueXyH5Tt3wyMZrpC+oYBLqlDABSwIDAQAB'
//私钥
var PRIVATE_KEY = 'MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALiylCHlw9NGU4XOc86dhb27JPWfIe0MlPCqKkjqYRvnMQLRjtfmqBrS49Gx2ErCaVnGlkW3AA5yP1uLzips4vmnrvrQjKLGunxJ29yPj9WK6DznE0f8i+almSK6NJVpLo2DQvsL3k9e17zZK55fIflO3fDIxmukL6hgEuqUMAFLAgMBAAECgYEApJQMR4BT1MmP12W17+CRshU2w9++/Vn+xcz7zOl9Cr4iAB73qA8SsIRHGS3eTA+cjLDWaty8oiLPriWP2mIYhVMQn731A9U4VAbtLWzybVeHJ0O4+JfZz7ZaXyefBaPefufZhMR4ZkFfsSa7Lvm+B2F181pVFpQT1JaHzg0zs0ECQQD4ptESHBNqEiRo11nVwto0pQRjyxaH4URb1eMBVbl4QkkLvEZlO4owsWCAmR0nKIro3P+2mdz0/fIyie+ewC77AkEAvifqRiN4Dp44X0NjmdOZlJRKJidFJwv4xy4pOZfUJteL7/rfDxpzfsQ7wXAexiI622TF1C17kzTvZHqSqDSl8QJATMq4Ju+kz01rETXw+KOE4F1WTbua6bwYcIRN50uiTBGsnYM3+mu48fDV7OFcr4tF20TldG9wXflPo2wWJOEVoQJACqVHa1fO/9qBw2uNZu4+ud+3av1l1LLJ4bTG4A+M9AO7NNsxo7HSZ3Vq9wBk6Ki/7MpufNtzAKHFCTYHgd04sQJAdgweTVIliH/pd8Y/pduVnmIUfoZPxni7p+3YcPaX7HIpG85V/Fup+GDS8se2jJ1HFuqKq56lDxkQ77GWQAtHNA=='
//使用公钥加密
var encrypt = new JSEncrypt();
encrypt.setPublicKey(PUBLIC_KEY);
var encrypted = encrypt.encrypt('haha');
console.log('加密后数据:%o', encrypted);
//使用私钥解密
var decrypt = new JSEncrypt();
decrypt.setPrivateKey(PRIVATE_KEY);
var uncrypted = decrypt.decrypt(encrypted);
console.log('解密后数据:%o', uncrypted);地址:https://www.npmjs.com/package/encryptjs
2、使用aes.js
var key = CryptoJS.enc.Utf8.parse("8NONwyJtHesysWpM");
var plaintText = 'ABCDEFGH'; // 明文
var encryptedData = CryptoJS.AES.encrypt(plaintText, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
console.log("加密前:"+plaintText);
console.log("加密后:"+encryptedData);
encryptedData = encryptedData.ciphertext.toString();
var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedData);
var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr);
var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8);
console.log("解密后:"+decryptedStr);
var pwd = "PCsUFtgog9/qpqmqXsuCRQ==";
//加密服务端返回的数据
var decryptedData = CryptoJS.AES.decrypt(pwd, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
console.log("解密服务端返回的数据:"+decryptedStr);地址:https://www.npmjs.com/package/aes-js
3、使用node-rsa
var NodeRSA = require('node-rsa');
var key = new NodeRSA({b: 512});
var text = 'Hello RSA!';
var encrypted = key.encrypt(text, 'base64');
console.log('encrypted: ', encrypted);
var decrypted = key.decrypt(encrypted, 'utf8');
console.log('decrypted: ', decrypted);地址:https://www.npmjs.com/package/node-rsa
本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!