常用加密算法
取盐校验
(不可逆) md5 md2 md4 带密码的md5(hmac)
sha1 sha256 sha512
对称加密(可还原)
AES DES 3DES 非对称加密(可还原) RSA(私钥 公钥) 同一个明文可以生成不同密文
特点:
1. 16进制,最大到f
2. base64 A-z a-z 0-9 +_=
1. 97d1605433a827a7f6b609847b80996d
2. l9FgVDOoJ6f2tgmEe4CZbQ==
md5:16位 32位 40位
32位、40位由16位两边做了一些处理
默认key 0123456789abcdef
123456通过md5加密:
49ba59abbe56e057
e10adc3949ba59abbe56e057f20f883e
12345通过sha1加密:
7c4a8d09ca3762af61e59520943dc26494f8941b
记一下123456的
sha1 sha256 sha512
40位 64位 128位
1.抓包 2.调试 搜索 password userid url链接 persistentCookie i/login/116005 (关键词 如果没有混淆,可以找到明文字体) abcdef 123456789 1732584193(搜索到md5加密算法) XHR
赋值方式:
对象.password password= (格式化多了一个空格 password =) ['password'] ["password"]
加盐:
hash(hash($input))
hash($input.$salt)
hash(hash($input).$salt)
搜索md5加密或者base64加密(RSA 转base64),通过跟栈,获得原始加密地方
hook btoa
3.扣取js
扣全了吗
this是谁
对象会用 : 冒号
var duixiang={
name: 'xiaoming',
md5:function (){
return 'md5'
}
}
const dx= duixiang;
console.log(dx.md5())
var xxx=function(){}
function xx(){
}
扣js改越少越好,不改可以运行最好,js的体积大小
如果utils是全局变量(utils=) 可以全扣
在闭包导出变量 在变量后面}的逗号,window.utils=utils; var(改,成var) 导出utils
导出 扣代码、补环境
4.改写 5.本地运行出值 请求服务器拿值
在Web开发中,保护用户数据是至关重要的,而对数据进行加密是其中一种有效手段。本文将深入浅出地介绍常见的加解密算法,包括消息摘要算法、对称加密算法以及非对称加密算法。
消息摘要算法
消息摘要算法,哈希算法
消息摘要算法是一种单向散列函数,常用于加密和数据完整性验证。常见的消息摘要算法包括MD5、SHA-1、SHA-256和SHA-512等。它的特点是对不同的明文生成唯一且定长的密文,是不可逆的,即无法通过“密文”还原出明文。
md5
const CryptoJs = require('crypto-js');
let password = "123456";
let encPwd = CryptoJs.MD5(password).toString();
console.log(encPwd); // e10adc3949ba59abbe56e057f20f883e
sha1
const CryptoJs = require('crypto-js');
let password = "123456";
let encPwd = CryptoJs.SHA1(password).toString();
console.log(encPwd); // 7c4a8d09ca3762af61e59520943dc26494f8941b
对称加密算法
对称加密算法
对称加密算法是一种加密技术,它使用相同的密钥(称为对称密钥)同时用于加密和解密数据。常见的加密算法有DES
、AES
、3DES
等。AES是一种广泛使用的对称加密算法,被认为是目前最安全的对称加密算法之一。
AES-ECB
let password = "123456";
let key = "1234567890abcdef"
cfg = {
mode: CryptoJs.mode.ECB,
padding: CryptoJs.pad.Pkcs7
}
let encPwd = CryptoJs.AES.encrypt(password, key, cfg).toString()
console.log(encPwd) // U2FsdGVkX1+meKI+IXd44qgc50bKb2rDbN91OutwBWs=
根据密钥长度的不同, 可以把AES加密算法分为AES-128/AES-192/AES-256。也就是说密钥的长度必须是16/24/32个字节 。常见mode模式有CBC
、ECB
两种,这两种模式的区别在于是否需要配置iv
向量
AES-CBC
const CryptoJs = require('crypto-js');
let password = CryptoJs.enc.Utf8.parse("123456") // 指定以什么编码方式解析明文
let key = CryptoJs.enc.Utf8.parse("1234567890abcdef")
let iv = CryptoJs.enc.Utf8.parse("123456") // 需指定初始向量
cfg = {
mode: CryptoJs.mode.CBC,
padding: CryptoJs.pad.Pkcs7,
iv: iv
}
let encPwd = CryptoJs.AES.encrypt(password, key, cfg).toString()
非对称加密算法
非对称加密算法
非对称加密算法是一种密码学中的加密方式,也被称为公钥加密算法。与对称加密算法不同,非对称加密算法使用一对密钥,分别是公钥和私钥。非对称加密算法的一个关键特性是,使用公钥加密的数据只能由相应的私钥解密,而使用私钥加密的数据只能由相应的公钥解密。常见的非对称加密算法包括RSA和ECC等
公钥可以公开分享的密钥,用于加密数据。任何人都可以获得公钥,但不能由公钥推导出私钥。
私钥是保密的密钥,用于解密由公钥加密的数据。只有私钥的持有者能够解密使用公钥加密的信息。
RSA
window = global
const JSEncrypt = require('jsencrypt')
publickey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnX3j/luQG7JnPFIFJKEvPC/tFtv14XIzT7FQXYpKsOt2t4uLh6hZa5H5WcEinF46nc91UbrS5UA9Fnnm+Ev20pwUEPVu4On47am6vJOsq8oqQoZDsMu6VGZIzKIm8vDylO6I2xrTaXY2G3hdiRKF7988tA4oYsFOTZ/yG/BOlNwIDAQAB'
// 加密
let jse = new JSEncrypt()
jse.setPublicKey(publickey)
var encStr = jse.encrypt('123456')
console.log("加密数据: " + encStr)
// 解密
privatekey = 'MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAKdfeP+W5Absmc8UgUkoS88L+0W2/XhcjNPsVBdikqw63a3i4uHqFlrkflZwSKcXjqdz3VRutLlQD0Weeb4S/bSnBQQ9W7g6fjtqbq8k6yryipChkOwy7pUZkjMoiby8PKU7ojbGtNpdjYbeF2JEoXv3zy0DihiwU5Nn/Ib8E6U3AgMBAAECgYA6KW0stEytM08HrQJ4X65oVquMwFg4mUC+7CMUtUZu303lfTCGfQgjsb9NXluA5SjHe/Xvv0DCHNYRxU5dBNBwhIXaRLy6zLKKKp/0gOn1C3dFY/MQOVoEpJ8uxUQh9Kf37F5J9gT64JNooKTTNydqTcmfIhG/u3WFiTVjfW5sEQJBANmvAgUneA6eEC6LwhX9gxdp0T2S+hop19zAm4ErHQld47TlSAxVgwArQG4oJ5J2OWlIT4vzuO1OJOaCj4wZYXMCQQDE1W0uZA1YtjVK7OUuD3f/rgNzolpc0XEEZDPxKsoirEFgW/cFNCTJKIdGK2RgnthLWiN01a9bL6+sF2vLO2wtAkAd0h3Cuv91cS3iUn8KKCqXQIXLm6DriKPrt+8VqORXbidNlsNh/SzvDv3KmXGiXNPMmn1bPM4upC/l7CjiFnAFAkBnmu+dO4zK5R2oEomPdRT0v+OROiPWN2gFp7iveJZtKb4/uiiL1KaIO4z4ol5zfSjcgNWo6dEjbjZJnwpeLykBAkAY/tYLGyrHe0isoZL2xXPlrvde2tbKcbzMrheH1wuqEMX0o0+uHCyFgn2rAzMcfUlntb9iZLLJDkJ+bFET1j3l'
jse.setPrivateKey(privatekey)
var Str = jse.decrypt(encStr)
console.log("解密数据: " + Str)