js 逆向中CryptoJS常用的加密算法使用及原理

js 逆向中CryptoJS常用的加密算法使用及原理

  • 1、编码
    escape unescape
    encodeURIComponent decodeURIComponent

Base64

  • 1、所有的数据都能被编码为只用65个字符就能表示的文本。
    标准的Base64每行为76个字符,每行末尾添加一个回车换行符(\r\n)。不论每行是否满76个字符,都要添加一个回车换行符。
  • 2、65字符:A~Z a~z 0~9 + / =
    URL Base64算法中,为了安全,会把 + 替换成 - ,把 / 替换成 _
    = 有时候用 ~ 或 . 代替
  • 3、Base64的应用
    密钥
    密文
    图片
    数据简单加密或者预处理
  • 4、Base64编码解码与btoa(编码)、atob(解码)

Hex

二进制数据最常用的一种表示方式。用0-9 a-f 16个字符表示。每个十六进制字符代表4bit。也就是2个十六进制字符代表一个字节。在实际应用中,尤其在密钥初始化的时候,一定要分清楚自己传进去的密钥是哪种方式编码的,采用对应方式解析,才能得到正确的结果

  • 2、单向散列函数(消息摘要算法)
    · 不管明文多长,散列后的密文定长
    · 明文不一样,散列后结果一定不一样
    · 散列后的密文不可逆
    · 一般用于校验数据完整性、签名 sign
    由于密文不可逆,所以后台无法还原,也就是说他要验证,会在后台以跟前台一样的方式去重新签名一遍。也就是说他会把源数据和签名后的值一起提交到后台。所以我们要保证在签名时候的数据和提交上去的源数据一致。这种算法特喜欢在内部加入时间戳,很多粗心的学员,通常会在签名的时候取一次时间戳,然后在提交源数据的时候,又取一次时间戳,导致后台验证失败。
    · 常见算法
    MD5
    SHA1
    SHA256
    SHA512
    HmacMD5
    HmacSHA1
    HmacSHA256

  • 3、加密算法
    加密和解密的过程是可逆的
    · 对称加密算法
    加密/解密使用相同的密钥
    DES 数据加密标准
    3DES TripleDES DESede
    AES 高级加密标准
    根据密钥长度不同又分为AES-128 AES-192 AES-256 对应16 24 32 字节
    其中AES-192 AES-256在Java中使用需获取无政策限制权限文件
    CryptoJS提供ECB,CBC(必须有iv向量),CFB,OFB,CTR五种模式
    填充提供NoPadding ZeroPadding Pkcs7(和Java中Pkcs5是一样的) Iso10126(随机) Iso97971 AnsiX923
    var cfg = {
    mode: CryptoJS.mode.CBC,//加密模式
    padding: CryptoJS.pad.Pkcs7,//填充方式
    iv: iv
    };

· 非对称加密算法

RSA

  • 1、使用公钥加密,使用私钥解密
  • 2、公钥是公开的,私钥保密
  • 3、加密处理安全,但是性能极差,单次加密长度有限制
    pkcs1padding 明文最大字节数为密钥字节数-11密文与密钥等长
    NoPadding 明文最大字节数为密钥字节数 密文与密钥等长
  • 4、RSA既可用于数据交换,也可用于数据校验
    数据校验通常结合消息摘要算法 MD5withRSA 等
  • 5、两种加密算法常见结合套路
    随机生成密钥
    密钥用于AES/DES/3DES加密数据
    RSA对密钥加密
    提交加密后的密钥和加密后的数据给服务器

parse和stringify

var wordArray = CryptoJS.enc.Utf8.parse(utf8String);
var wordArray = CryptoJS.enc.Hex.parse(hexString);
var wordArray = CryptoJS.enc.Base64.parse(base64String);
var wordArray = CryptoJS.enc.Latin1.parse(latin1String);

var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);
var hexString = CryptoJS.enc.Hex.stringify(wordArray);
var base64String = CryptoJS.enc.Base64.stringify(wordArray);
var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);

CryptoJS.format.OpenSSL.parse
CryptoJS.format.OpenSSL.stringify

Base64与Hex

var srcs = CryptoJS.enc.Utf8.parse(“15968079470”);
CryptoJS.enc.Base64.stringify(srcs);
//CryptoJS.enc.Hex.stringify(srcs);

消息摘要算法

var hash = CryptoJS.MD5(message);
var hash = CryptoJS.MD5(wordArray);
var hmac = CryptoJS.HmacMD5(message, key);

var hash = CryptoJS.SHA1(message);
var hash = CryptoJS.SHA1(wordArray);
var hmac = CryptoJS.HmacSHA1(message, key);

var hash = CryptoJS.SHA224(message);
var hash = CryptoJS.SHA224(wordArray);
var hmac = CryptoJS.HmacSHA224(message, key);

var hash = CryptoJS.SHA256(message);
var hash = CryptoJS.SHA256(wordArray);
var hmac = CryptoJS.HmacSHA256(message, key);

var hash = CryptoJS.SHA3(message);
var hash = CryptoJS.SHA3(wordArray);
var hmac = CryptoJS.HmacSHA3(message, key);

var hash = CryptoJS.SHA384(message);
var hash = CryptoJS.SHA384(wordArray);
var hmac = CryptoJS.HmacSHA384(message, key);

var hash = CryptoJS.SHA512(message);
var hash = CryptoJS.SHA512(wordArray);
var hmac = CryptoJS.HmacSHA512(message, key);

对称加密算法

var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);
var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);

var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);
var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);

var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);
var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);

var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);
var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);

==============================================================
var cfg={
iv: iv,
mode:CryptoJS.mode.CBC,
padding:CryptoJS.pad.Pkcs7,
format:CryptoJS.format.Hex
};

var srcs = CryptoJS.enc.Hex.parse(“2783726e20d0d334520cbbbb9cd95d9b”);
//CryptoJS.enc.Base64.stringify(srcs);
var decryptdata = CryptoJS.AES.decrypt(
CryptoJS.lib.CipherParams.create({ ciphertext: srcs}),
key,
cfg
);
decryptdata.toString(CryptoJS.enc.Utf8);

==============================================================

加密模式

CBC ECB CFB OFB CTRGladman CTR

填充方式

NoPadding ZeroPadding Pkcs7(Pkcs5) Iso10126 Iso97971 AnsiX923

wordArray转换到字符串

var string = wordArray + ‘’;
var string = wordArray.toString();
var string = wordArray.ciphertext.toString(); //对称加密算法里有

var string = wordArray.toString(CryptoJS.enc.Utf8);
var string = wordArray.toString(CryptoJS.format.Hex);
var string = wordArray.toString(CryptoJS.format.Base64);

另外的调用方式

SHA256

var hasher = CryptoJS.algo.SHA256.create();
hasher.reset();
hasher.update(‘message’);
hasher.update(wordArray);
var hash = hasher.finalize();
var hash = hasher.finalize(‘message’);
var hash = hasher.finalize(wordArray);

HmacSHA256

var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);
hmacHasher.reset();
hmacHasher.update(‘message’);
hmacHasher.update(wordArray);
var hmac = hmacHasher.finalize();
var hmac = hmacHasher.finalize(‘message’);
var hmac = hmacHasher.finalize(wordArray);

支持的其他算法

RIPEMD160
HmacRIPEMD160

PBKDF2

CryptoJS.PBKDF2(“22222222222”, “just-code”,{keySize: 8,iterations: 10})

EvpKDF

CryptoJS.EvpKDF(“22222222222”, “just-code”,{keySize: 8,iterations: 10})

RC4Drop

Rabbit 加密用Rabbit 解密用RabbitLegacy
RabbitLegacy 加密解密都用RabbitLegacy

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
根据提供的引用内容,我无法直接回答您的问题。引用提到了DES加密算法,它是一种对称加密算法,需要使用相同的密钥进行加密和解密。引用提到了拼多多的API解密和JS逆向安全控制实现。然而,您的问题是关于加密算法JS逆向安全控制实现的,而不是关于DES加密算法或拼多多API解密的。 对于加密算法JS逆向安全控制实现的问题,我可以提供一些一般性的信息和建议: 1. JS逆向工程:JS逆向工程是指通过分析和破解JavaScript代码来获取其内部逻辑和实现细节。这可以帮助您理解加密算法的实现方式和安全控制措施。 2. 安全控制实现:在加密算法,安全控制是指保护密钥和加密数据的措施。这包括密钥管理、访问控制、防止信息泄露等方面的措施。在实现加密算法时,需要考虑这些安全控制措施以确保数据的安全性。 3. 加密算法选择:选择适合您需求的加密算法是非常重要的。不同的加密算法具有不同的安全性和性能特点。您可以根据您的具体需求选择合适的加密算法。 4. 密钥管理:密钥管理是加密算法的一个重要方面。确保密钥的安全性和合理的密钥分发、存储和更新策略是保护加密数据的关键。 5. 安全审计和漏洞修复:定期进行安全审计和漏洞修复是保持加密算法的安全性的重要步骤。及时发现和修复潜在的安全漏洞可以防止攻击者利用这些漏洞来破解加密算法。 请注意,以上是一般性的信息和建议,具体的加密算法JS逆向安全控制实现需要根据具体情况进行详细分析和设计。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不走小道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值