通常在api开发中,为了保证数据在一定程度上的安全性,我们需要采用一些加密手段,这篇文章主要介绍下使用ase来进行加密、解密。aes的加密标准用来替代原先的DES,已经被多方分析且广为全世界所使用,AES加密是一种对称加密算法,需要保证客户端和服务端使用的相同秘钥,而且加密的padding和mode 需要两端相对应。
rsa的公钥私钥是成对的,用其中一个加密只能用另一个解密,常用公钥加密私钥解密。 一开始看到斯坦佛那个库,原始的算法实现:
长度,建议至少1024。模数n(常取默认65537)两边都要用。
指数e,和n一起就是公钥。指数d,和n一起就是私钥。质数p和q用于生成密钥对,然后就丢弃不公开。
//公钥
//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
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
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
近来,加密数字货币已经在世界上很流行,几乎所有人都听说过它。随着价格的不断提升,越来越多的人愿意在加密数字货币上投资了。尽管大名鼎鼎,但多数人都不太了解它们。
RSA加密是一种非对称加密。可以在不直接传递密钥的情况下,完成解密。这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程,分别称为公钥和私钥。
对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥加密。对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。
rsa加密方式:首先引入一下js文件,路径根据实际情况自行修改;Md5加密方式;Sha256加密方式;总体而言,rsa加密会比其他两种方式复杂,需要注意的是,rsa在初始化时一定要先赋给它一个公钥。
AES:高级加密标准 ( Advanced Encryption Standard ),AES是一种对称加密算法:加密需要密钥,且加密密钥和解密密钥相同,下面是AES加密的Node实现:
HTTP压缩,在HTTP协议中,其实是内容编码的一种。在http协议中,可以对内容(也就是body部分)进行编码, 可以采用gzip这样的编码。 从而达到压缩的目的。 也可以使用其他的编码把内容搅乱或加密
图片加解密:可以将人员身份证图片通过修改字节加密,并且可将身份证信息也写入图片中。 可以直接将以下代码复制到一个php文件中进行测试。详情请看代码。
最近遇到的几个网站在提交密码时提交的已经是密文,也就是说在网络上传输的密码是密文,这样提升了密码在网络传输中的安全性。前端的话Google之前出过一个crypto-js,为浏览器的js提供了加解密方案。
crypto 模块提供了加密功能,包含对 OpenSSL 的哈希、HMAC、加密、解密、签名、以及验证功能的一整套封装。我们这里讲crypto AES算法加密
CryptoJS (crypto.js) 为 JavaScript 提供了各种各样的加密算法。目前已支持的算法包括:MD5,SHA-1,SHA-256,AES,Rabbit,MARC4,HMAC,HMAC-MD5
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!