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

时间: 2018-02-08阅读: 7595标签: 加密

通常在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.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

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

关闭

前端密码加密的几种方式整理

rsa加密方式:首先引入一下js文件,路径根据实际情况自行修改;Md5加密方式;Sha256加密方式;总体而言,rsa加密会比其他两种方式复杂,需要注意的是,rsa在初始化时一定要先赋给它一个公钥。

javascript有加密算法吗?

作为前端,数据提交到后台之前,重要的数据要进行加密一下,虽然已经有 https 等技术,但是增加一道前端的加密还是相对更安全的。JavaScript中是有加密算法的,下面介绍几种JavaScript中的加密算法。

nodejs实现端到端加密

端到端加密的实现主要依据两个主要算法:1. diffie-hellman密钥交换算法(上文提到过)2.AES(-CBC)对称加密算法,主要流程如下:两台设备各生成一对diffie-hellman公私钥。在网络上交换公钥。

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

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

node代码如何加密?

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

crypto加密的使用

crypto 模块提供了加密功能,包含对 OpenSSL 的哈希、HMAC、加密、解密、签名、以及验证功能的一整套封装。我们这里讲crypto AES算法加密

加密货币领域的 12 个关键问题

在加密货币领域,哪些问题至关重要而又至今没有确切的答案?哪些问题对加密货币格局的最终形态和最佳公司的前景能产生最重大的影响?我想试着一一指出!用 12 条推文提出以下 12 个问题。

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

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

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

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

对称加密和非对称加密介绍和区别的理解

对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥加密。对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。

点击更多...

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