JS逆向的加密方法及解密

MD5\SHA\AES\DES\RSA

MD5

加密:

var cry = require('crypto-js')
var aaaa = cry.MD5('待加密字符串').toString()
console.log(aaaa)

关于MD5的解密:
MD5密码是一种常用的数字摘要算法,它可以将任意长度的字符串转换成一个32位的散列值,常用于加密用户密码和文件完整性检查。但由于MD5密码是一种不可逆的加密方式,所以不能直接解密,只能通过穷举法或使用在线解密工具来解密。因为MD5的碰撞性,决定了存在两个不同的输入信息,其MD5相同的可能,因此不适用于安全性认证

SHA256加密(64位)

var cry = require('crypto-js')
var aaaa = cry.SHA256('待加密字符串').toString()
console.log(aaaa)
console.log(aaaa.length)

关于SHA256的解密:SHA256是散列算法,不是加密算法,不存在解密的问题。SHA256基本上是不可破解的,即找不到(或概率极小)“碰撞”结果。SHA256的256位密钥从未被泄露过,因此SHA256是牢不可破的函数。相对于MD5和SHA1而言,SHA256很安全。MD5就不一样了,单纯使用比较容易遭到撞库攻击。通过预先计算知道MD5的对应关系,存在数据库中,然后使用的时候反查,MD5就可能被解密。

自定义AES加解密函数(使用相同的密钥)

		 const key = CryptoJS.enc.Utf8.parse("秘钥");  //十六位十六进制数作为密钥
		 const iv = CryptoJS.enc.Utf8.parse('偏移量');   //十六位十六进制数作为密钥偏移量
		//解密方法
		 function Decrypt(word) {
		     let encryptedHexStr = CryptoJS.enc.Hex.parse(word);
		     let srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
		     let decrypt = CryptoJS.AES.decrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
		     let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
		     return decryptedStr.toString();
		 }
		 
		 //加密方法
		 function Encrypt(word) {
		     let srcs = CryptoJS.enc.Utf8.parse(word);
		     let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
		     return encrypted.ciphertext.toString().toUpperCase();
		 }
		
		 //以上方法中 mode就是加密模式,padding是填充。

DES加密/解密

/DES加密
function encryptByDES(message, key){
    var keyHex = CryptoJS.enc.Utf8.parse(key);
    var encrypted = CryptoJS.DES.encrypt(message, keyHex, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    return encrypted.ciphertext.toString();
}
//DES加密
function decryptByDES(ciphertext, key){
    var keyHex = CryptoJS.enc.Utf8.parse(key);
    var decrypted = CryptoJS.DES.decrypt({
        ciphertext: CryptoJS.enc.Hex.parse(ciphertext)
    }, keyHex, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    var result_value = decrypted.toString(CryptoJS.enc.Utf8);
    return result_value;
}

var message = 'hello wold';//需要加密的数据
var key = '12345678';//加密key
//加密
desMessage = encryptByDES(message, key);
console.log(desMessage);
//解密
message = decryptByDES(desMessage,key)
console.log(message);

AES和DES之间的区别:
加密过程:在DES中,将明文分为两半,然后再进行进一步处理;而在AES中,整个块不进行除法,整个块一起处理以生成密文。
速度:相对而言,AES比DES快得多,能够在几秒钟内加密大型文件。
安全性:AES是一种比DES更安全的加密算法,具有更大的密钥大小并且运行更快。

RSA 经典的非对称加密算法

import JSEncrypt from 'jsencrypt'
// 加密
 var encryptor = new JSEncrypt()  // 创建加密对象实例
  //公钥复
  var pubKey = '-----BEGIN PUBLIC KEY-----MIGfMA0......AQAB-----END PUBLIC KEY-----'
  encryptor.setPublicKey(pubKey)//设置公钥
  var rsaPassWord = encryptor.encrypt('要加密的内容')  // 对内容进行加密



// 解密
 var decrypt = new JSEncrypt()//创建解密对象实例
  //秘钥
  var priKey  = '-----BEGIN RSA PRIVATE KEY-----MIICXAIBA......AKBgQC1QQWRk=-----END RSA PRIVATE KEY----'
  decrypt.setPrivateKey(priKey)//设置秘钥
  var uncrypted = decrypt.decrypt(encrypted)//解密之前拿公钥加密的内容

需要获得相应的公钥或者私钥

  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值