常见加密算法

哈希算法

在 JavaScript 中和 Python中的基本实现方法,遇到 JS 加密的时候可以快速还原加密过程,有的网站在加密的过程中可能还经过了其他处理,但是大致的方法是一样的。

安装对应的模块:npm install crypto-js --save

消息摘要算法/签名算法:MD5、SHA、HMAC
MD5特征
密文 32位16进制数据 220466675e31b9d20c051d5e57974150
128位 16字节 32个字符

//MD5 有道
var CryptoJS = require('crypto-js')
navigator={
    appVersion:'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
}
r = function(e) {
    var t = CryptoJS.MD5(navigator.appVersion).toString()
      , r = "" + (new Date).getTime()
      , i = r + parseInt(10 * Math.random(), 10);
    return {
        ts: r,
        bv: t,
        salt: i,
        sign: CryptoJS.MD5("fanyideskweb" + e + i + "Ygy_4c=r#e#4EX^NUGUc5").toString()
    }
}
console.log(r('hello'));

SHA系列
特征
sha1 40位
sha224 56
sha256 64
sha384 96
sha512 128
8的倍数
明文一样 密文也一样 不可逆
分析JS逆向 可以根据密文盲猜 方便搜索

// 引用 crypto-js 加密模块
var CryptoJS = require('crypto-js')

function SHA1Encrypt() {
    var text = "12312312"
    return CryptoJS.SHA384(text).toString();
}

console.log(SHA1Encrypt())
// faec670ce75fe79cae1fa899617818031b1f201c  40
对称加密

对称加密(加密解密密钥相同):DES、3DES、AES、RC4

对称式加密就是加密和解密使用同一个密钥。信息接收双方都需事先知道密匙和加解密算法且其密匙是相同的,之后便是对数据进行加解密了。对称加密算法用来对敏感数据等信息进行加密。

常见算法归纳

DES:56位密钥,由于密钥太短,被逐渐被弃用。
AES:有128位、192位、256位密钥,现在比较流行。密钥长、可以增加破解的难度和成本。
对称加密
jS逆向
1、算法确定
2、JS里面找 key
3、如果是cbc模式 需要找 iv
4、明文

DES
    破解搜索: encrypt(优先)   DES     padding
var CryptoJS = require('crypto-js')
desEncrypt=function(e, t) {
    var n = CryptoJS.enc.Utf8.parse(t);
    return CryptoJS.DES.encrypt(e, n, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    }).toString()
}

rndString=function() {
    for (var e = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz", t = "", n = 0; n < 16; n++) {
        var a = Math.floor(Math.random() * e.length);
        t += e.substring(a, a + 1)
    }
    return t
}
t=rndString()
e='{"username":"uuu123","password":"yyyyy12345","captcha":"2"}'
console.log(desEncrypt(e,t));

AES加密算法采用分组密码体制,每个分组数据的长度为128位16个字节,密钥长度可以是128位16个字节、192位或256位,一共有四种加密模式,我们通常采用需要初始向量IV的CBC模式,初始向量的长度也是128位16个字节。

   var CryptoJS = require('crypto-js')
    d = {}
    d.a = CryptoJS
        function h(t) {
            f = d.a.enc.Utf8.parse("jo8j9wGw%6HbxfFn")
            m = d.a.enc.Utf8.parse("0123456789ABCDEF");
            var e = d.a.enc.Hex.parse(t)
              , n = d.a.enc.Base64.stringify(e)
              , a = d.a.AES.decrypt(n, f, {
                iv: m,
                mode: d.a.mode.CBC,
                padding: d.a.pad.Pkcs7
            })
              , r = a.toString(d.a.enc.Utf8);
            return r.toString()
        }
非对称加密

非对称加密
特点:加密后的数据很长 加密后的结果不一样
常见JavaScript调试算法

搜索关键词 new JSEncrypt(),JSEncrypt 等,一般会使用 JSEncrypt库,npm install jsencrypt --save 可以实现 JSEncrypt(),会有 new 一个实例对象的操作;
搜索关键词 setPublicKey、setKey、setPrivateKey、getPublicKey 等,一般实现的代码里都含有设置密钥的过程。
如果在完整看到使用 JSEncrypt 进行加密 可以判是标准的算法

JSEncrypt = require('jsencrypt')
var CryptoJS = require('crypto-js')
function get_pwd(pwds,item1,itme2){
    var encrypt = new JSEncrypt();
    encrypt.setPublicKey(item1);
    var encrypted = encrypt.encrypt(itme2 + CryptoJS.SHA512(pwds).toString());
    return encrypted
}
国密算法

SM4 为无线局域网标准的分组加密算法,对称加密,用于替代 DES/AES 等国际算法,SM4 算法与 AES算法具有相同的密钥长度和分组长度,均为 128 位,故对消息进行加解密时,若消息长度过长,需要进行分组,要消息长度不足,则要进行填充。加密算法与密钥扩展算法都采用 32 轮非线性迭代结构,解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。

SM2 为椭圆曲线(ECC)公钥加密算法,非对称加密,SM2 算法和 RSA算法都是公钥加密算法,SM2 算法是一种更先进安全的算法,在我们国家商用密码体系中被用来替换RSA 算法,在不少官方网站会见到此类加密算法。我国学者对椭圆曲线密码的研究从 20 世纪 80 年代开始,目前已取得不少成果,SM2 椭圆曲线公钥密码算法比 RSA算法有以下优势:

const sm2 = require('sm-crypto').sm2
// 1 - C1C3C2,0 - C1C2C3,默认为1
const cipherMode = 1

// 获取密钥对
let keypair = sm2.generateKeyPairHex()
let publicKey = keypair.publicKey   // 公钥
let privateKey = keypair.privateKey // 私钥

let msgString = "this is the data to be encrypted"
let encryptData = sm2.doEncrypt(msgString, publicKey, cipherMode)
console.log(encryptData);
let decryptData = sm2.doDecrypt(encryptData, privateKey, cipherMode) // 解密结果
console.log(decryptData);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值