当前位置: 首页 > article >正文

常用加密算法

取盐校验

(不可逆) 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=) 可以全扣
 

image-20240206193452259

image-20240206194642769

image-20240206195158254

在闭包导出变量
在变量后面}的逗号,window.utils=utils; var(改,成var)
导出utils
​

image-20240206201109399

image-20240206201241180

导出 扣代码、补环境

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

对称加密算法

对称加密算法

对称加密算法是一种加密技术,它使用相同的密钥(称为对称密钥)同时用于加密和解密数据。常见的加密算法有DESAES3DES等。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模式有CBCECB两种,这两种模式的区别在于是否需要配置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)


http://www.kler.cn/a/229961.html

相关文章:

  • Vue 3 Teleport 教程
  • mac下Gpt Chrome升级成GptBrowser书签和保存的密码恢复
  • 情绪识别项目
  • 阿里发布 EchoMimicV2 :从数字脸扩展到数字人 可以通过图片+音频生成半身动画视频
  • HTTP 管道传输与多路复用
  • 极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【五】
  • 爬虫(三)
  • ELFK日志采 - QuickStart
  • 机器人抓取 [ 题目/摘要 ] 更新中..
  • Golang与Erlang有什么差异
  • 动态规划C语言
  • SpringBoot 事务管理Transactional 数据回滚 数据一致性
  • 工业笔记本丨行业三防笔记本丨亿道加固笔记本定制丨极端温度优势
  • containerd中文翻译系列(五)客户端选项
  • 10英寸安卓车载平板电脑丨ONERugged车载工业平板:解决农业工作效率
  • 符号绑定和函数绑定
  • 详解WebRTC rtc::Thread实现
  • 全新 鸿蒙系统
  • Leetcode—33. 搜索旋转排序数组【中等】
  • Spring设计模式之单例模式
  • 计算huggingface模型占用硬盘空间的实战代码
  • 电机粘性阻尼系数D
  • 分享springboot框架的一个开源的本地开发部署教程(若依开源项目开发部署过程分享持续更新二开宝藏项目MySQL数据库版)
  • opensuse安装百度Linux输入法
  • 2024.02.05
  • 假期2.5