js常见的加密方式

本文介绍了JavaScript中常见的几种加密方式,包括不可逆的MD5用于密码加密,对称加密算法如DES和AES,以及非对称加密的RSA算法。此外,还提到了Base64编码,一种看似加密但实际上只是编码的方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

js常见的加密方式

线性散列算法(签名算法)MD5

  • MD5加密是生成一个固定长度的字符串(32位或者16位的)32位的居多
  • MD5加密是不可逆的。常规的破解的就是暴力破解(使用大量的数据进行MD5加密,然后使用加密的字符串与要破解的字符串进行对比)
  • 使用场景:登录密码加密的环节
  • 增加MD5破解难度:
    • 加密一个随机的字符串,生成字符串1
    • 字符串1+要加密的数据,生成字符串2
    • 对字符串2进行md5加密

js的代码实现

<html>
	<script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.js"></script>//引用md5的源文件
	<script type="text/javascript"> 
		var hashCode = md5("i am bobo!");//使用MD5对字符串进行加密
		alert (hashCode)
	</script>40e09bd7f75bb6918
</html>

对称加密算法DES/AES

  • DES全称为Data Encryption Standardy即数据加密标准,是一种使用密钥加密的算法。·该加密算法是一种对称加密方式,其加密运算、解密运算需要使用的是同样的密钥(一组字符串)即可。(加密和解密端必须使用同一个密钥的才可以进行加密和解密)
  • 注意:现在用AES这个标准来替代原先的DES。
  • AES和DES的区别:
    • 加密后密文长度的不同:DES加密后密文长度是8的整数倍AES加密后密文长度是16的整数倍
    • 应用场景的不同:企业级开发使用DES足够安全
    • 如果要求高使用AES
    • DES和AES切换只需要修改 CryptoJS.AES <=> CryptoJS.DES
  • 使用DES/AES进行数据交互时要求双方都拥有相同的私匙
  • 破解方法:
    • 暴力破解。
    • DES如果使用 56 位的密钥,则可能的密钥数量是 2 的 56 次方个。只要计算足够强大是可以被破解的
  • DES算法的入口参数有三个:
    • Key、 Data、 Mode、padding。
    • Key为7个字节共56位,是DES算法的工作密钥;
    • Data为8个字节64位,是要被加密或被解密的数据;
    • Mode为DES的工作方式。
    • padding为填充模式,如果加密后密文长度如果达不到指定整数倍(8个字节、16个字节),填充对应字符
      • padding的赋值固定为CryptoJS.pad.Pkcs7即可
<html>
	<scrip src="https://cdn.bootcss.com/crypto-js/3.1.9-1/crypto-js.js"></script>
	<script type="text/javascript">
		var aseKey = "12345678"//定制秘钥,长度必须为: 8/16/32位
		var message = "i am bobo,who are you ?";//加密 DES/AES切换只需要修改 CryptoJS.AES <=> CryptoJS.DES
		var encrypt = CryptoJS.DES.encrypt(message,CryptoJS.enc.Utf8.parse(aseKey), {
			mode: CryptoJS.mode.ECB, 
			padding: CryptoJS.pad.Pkcs7 
			}).tostring();
		alert(encrypt); // OGh9NGnwOpgmB525QsoJhVJlsn5Ev9cHbABgypzhGnM
	//解密
		var decrypt = CryptoJS.DES.decrypt(encrypt,CryptoJS.enc.Utf8.parse(aseKey), {
			mode: CryptoJS.mode.ECB,
			padding: CryptoJS.pad.Pkcs7
			}).toString(CryptoJS.enc.Utf8);
		alert(decrypt )
	</script>
</html>

非对称加密RSA

  • RSA加密:RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。
  • 非对称加密算法:
    • 非对称加密算法需要两个密钥:
    • 公开密钥(publickey:简称公钥)
    • 私有密钥(privatekey:简称私钥)
    • 公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
  • 注意:
    • 使用时都是使用公匙加密使用私匙解密。公匙可以公开,私匙自己保留。
    • 算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。

rsa加密网站:http://web.chacuo.net/netrsakeypair

<html>
<script src="https://cdn.bootcss.com/jsencrypt/3.0.0beta.1/jsencrypt.js"></script>
	<script type="text/javascript">
		//公钥
		var PUBLIC_KEY = '-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpUmpjRZryUsFXc5xE6P/1hOqVhhlCHMi2DhIiQnGhb8DG8usWbzikt8lAUpeU1gyNomZtG1RPnenNmmevoLDBaFuXutvlzn4tf7yjLXEij2Fb5JoSBNhKGjlQpXalEoibuD6qaC6BGVLdSN1O9G1ko2UACM+xd+oqJAXmLY3FKwIDAQAB-----END PUBLIC KEY-----';
		//私钥
		var pRIvatE-KEY = '-----BEGIN PRIVATE KEY-----MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKlSamNFmvJSwVdznETo//WE6pWGGUIcyLYOEiJCcaFvwMby6xZvOKS3yUBSl5TWDI2iZm0bVE+d6c2aZ6+gsMFoW5e62+XOfi1/vKMtcSKPYVvkmhIE2EoaOVCldqUSiJu4PqpoLoEZUt1I3U70bWSjZQAIz7F36iokBeYtjcUrAgMBAAECgYAPYqi+Gn4I1NIyoxOpA072vTwfmA7Ffh4SxNaK/GSc2a23pi0MXdDUzspfqOGTKZv8ZqxN77TKgzvSbdxMDhrhYjtTzP7oZaC/mQZM0HXSjvbg6GkkGkf2ShDnmsAQvRNuvm/zae8ESsnLvKjvCPvKtpqg0QHB8f6NMr8rpGzk8QJBANq0lOE23LmV2mMeyDeVgJvvqrhU7d/5vyxXvzFNqzNTa33zw1IiNB74SFFIifQTxmg4+Nr1hR9bUy9FJD9/tWkCQQDGMglT4AroPFDM1VFy18NG0vtcEmRaAEO884JAHU4U2c0kuaYidBEPPiS++omuE48U+6WyD95f2EG6ZqK8uS9zAkBivFHWVyFQ+5ErXJNBXNJCE/I748O8cRDYoQik5o6azldh9nHAm8ZyEN79K0V0lpTlKotWtq8R1/X3CjzyGeK5AkAmyPnsUQaxZcRGIWSb/b84J+eKoArFVhHrcxfFJjb2e5zal/379gy0l+um9+5jg25Xo9tMGjDhPre2G4mzNuYjAkEAigzMEX3N/aukR2cQdlQu+IARzmHYgkcjCpGP30Blsi+zc3mVZTVdmrzsqC2LNObTbb7gK/Q2uive6bFGU38Kcg==-----END PRIVATE KEY-----'

		var encrypt = new JSEncrypt();//实例化加密对象
		encrypt.setPubficKey(PUBLIC_KEY);//设置公钥
		var encrypted = encrypt.encrypt('hello bobo!');//对指定数据进行加密
		alert (encrypted)
		//使用私钥解密
		var decrypt = new JSEncrypt();
		decrypt.setPrivateKey(PRIVATE_KEY);//设置私钥
		var uncrypted = decrypt.decrypt(encrypted);//解密
		alert (uncrypted);
	</script>
</html>

base64伪加密

  • Base64是一种用64个字符来表示任意二进制数据的方法。base64是一种编码方式而不是加密算法。只是看上去像是加密而已。
  • Base64使用A–Z, a–z, O–9, +, /这64个字符实现对数据进行加密。
<html>
    <script type="text/javascript">
		// 创建Base64对象
		var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){var t="";var n,r,i,s,o,u,a;var f=0;e=Base64._utf8_encode(e);while(f<e.length){n=e.charCodeAt(f++);r=e.charCodeAt(f++);i=e.charCodeAt(f++);s=n>>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){u=a=64}else if(isNaN(i)){a=64}t=t+this._keyStr.charAt(s)+this._keyStr.charAt(o)+this._keyStr.charAt(u)+this._keyStr.charAt(a)}return t},decode:function(e){var t="";var n,r,i;var s,o,u,a;var f=0;e=e.replace(/[^A-Za-z0-9+/=]/g,"");while(f<e.length){s=this._keyStr.indexOf(e.charAt(f++));o=this._keyStr.indexOf(e.charAt(f++));u=this._keyStr.indexOf(e.charAt(f++));a=this._keyStr.indexOf(e.charAt(f++));n=s<<2|o>>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r)}if(a!=64){t=t+String.fromCharCode(i)}}t=Base64._utf8_decode(t);return t},_utf8_encode:function(e){e=e.replace(/rn/g,"n");var t="";for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r)}else if(r>127&&r<2048){t+=String.fromCharCode(r>>6|192);t+=String.fromCharCode(r&63|128)}else{t+=String.fromCharCode(r>>12|224);t+=String.fromCharCode(r>>6&63|128);t+=String.fromCharCode(r&63|128)}}return t},_utf8_decode:function(e){var t="";var n=0;var r=c1=c2=0;while(n<e.length){r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r);n++}else if(r>191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3}}return t}}
		 
		// 定义字符串
		var string = 'i am bobo!';
		 
		// 加密
		var encodedString = Base64.encode(string);
		alert(encodedString); 
		 
		// 解密
		var decodedString = Base64.decode(encodedString);
		alert(decodedString); 
	</script>
		
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值