前端采用js 实现aes加密、解密功能

更新日期: 2018-02-08阅读量: 9742标签: 加密

通常在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


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: https://www.fly63.com/article/detial/426

node代码如何加密?

要用nodejs开发接口,实现远程调用,如果裸奔太危险了,就在网上找了一下nodejs的加密,感觉node-rsa挺不错的,下面来总结一下简单的rsa加密解密用法。

web前端常见的加密算法介绍

在信息安全越来越受重视的今天,前端的各种加密也变得更加重要。通常跟服务器的交互中,为保障数据传输的安全性,避免被人抓包篡改数据,除了 https 的应用,还需要对传输数据进行加解密。

使用Crypto-JS进行加密解密的简单方法

文件众多,总结起来就2种,一个是核心文件core-min.js,其他的都是具体的某一种加密方法.使用时必须加载core-min.js,然后使用哪种加密解密就加载哪个加密文件,看名字就知道是什么加密,

php实现对图片对称加解密

图片加解密:可以将人员身份证图片通过修改字节加密,并且可将身份证信息也写入图片中。 可以直接将以下代码复制到一个php文件中进行测试。详情请看代码。

Crypto-JS加密库_用于前端加密解密

CryptoJS (crypto.js) 为 JavaScript 提供了各种各样的加密算法。目前已支持的算法包括:MD5,SHA-1,SHA-256,AES,Rabbit,MARC4,HMAC,HMAC-MD5

开发者需要研究的加密数字货币

近来,加密数字货币已经在世界上很流行,几乎所有人都听说过它。随着价格的不断提升,越来越多的人愿意在加密数字货币上投资了。尽管大名鼎鼎,但多数人都不太了解它们。

RSA签名算法_RSA加密、解密、签名、验签的原理及方法

RSA加密是一种非对称加密。可以在不直接传递密钥的情况下,完成解密。这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程,分别称为公钥和私钥。

Node.js 内置模块crypto加密模块AES

AES:高级加密标准 ( Advanced Encryption Standard ),AES是一种对称加密算法:加密需要密钥,且加密密钥和解密密钥相同,下面是AES加密的Node实现:

HTTPS用的是对称加密还是非对称加密?

随着互联网安全意识的普遍提高,对安全要求稍高的应用中,HTTPS的使用是很常见的,甚至在1年前,苹果公司就将使用HTTPS作为APP上架苹果应用市场的先决条件之一,所以无论是即时通讯IM还是其它应用,在网络安全意识增强的今天

vue项目配置 webpack-obfuscator 进行代码加密混淆

公司代码提供给第三方使用,为了不完全泄露源码,需要对给出的代码进行加密混淆,前端代码虽然无法做到完全加密混淆,但是通过使用 webpack-obfuscator 通过增加随机废代码段

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!