JS常见加密 AES、DES、RSA、MD5、SHAI、HMAC、Base64(编码) - Python/JS实现
主要加密算法前言
本文仅仅介绍了常见的一些JS加密,并记录了JS和Python的实现方式
常见的加密算法基本分为这几类:
(1)base64编码伪加密
(2)线性散列算法(签名算法)MD5
(3)安全哈希算法 SHAI
(4)散列消息鉴别码 HMAC
(5)对称性加密算法 AES,DES
(6)非对称性加密算法 RSA
一、编码,加密?
1. 什么是编码?
编码是信息从一种形式或格式转换为另一种形式的过程,也称为计算机编程语言的代码简称编码;
2. 什么是加密?
加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。
二、常见编码
1.Base64
base64是基于64个可打印ascii字符对任意字节数据进行编码算法,base64是一种编码方式而不是加密算法。只是看上去像是加密而已;
Base64使用A–Z,a–z,0–9,+,/ 这64个字符实现对数据进行加密。
2. Base64 - JS实现
<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 xz!';// 加密var encodedString = Base64.encode(string);alert(encodedString);// 解密var decodedString = Base64.decode(encodedString);alert(decodedString);</script>
</html>
3. Base64 - Python实现
import base64 str1 = 'i am xz'
str_encode = base64.b64encode(str1.encode())
print("Base64编码:", str_encode)
str_decode = base64.b64decode(str_encode)
print("Base64解码:", str_decode)
4.Unicode
Unicode是计算机中字符集,编码的一项业界标准,被称为统一码,万国码,
表现形式一般以"\u"或"&#"开头;
5.Urlencode
urlencode是URL编码,也称作百分号编码,用于把url的符号进行转换;
三、线性散列算法(签名算法)MD5
1.MD5介绍
MD5是一种被广泛使用的线性散列算法,可以产生出一个128位(16字节)的散列值(hash value)。
特征:MD5加密之后产生的是一个固定长度(32位或16位)的数据,常规讲MD5是不存在解密的。
使用场景:注册账号时的密码一般都是用的MD5加密。
2. MD5 - JS实现
<!DOCTYPE html>
<html lang="en"><!-- md5源码地址:https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.js --><!-- md5常用于登录--><script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.js"></script><script type="text/javascript">var str1 = 'i am xz'var str_encode = md5(str1);alert(str_encode) // 在弹窗中输出文本 f0404c7b9bff0bde8d6df8b64759960f</script>
</html>
3. MD5 - Python实现
import hashlib str1 = 'i am xz'
m = hashlib.md5()
m.update(str1.encode('utf-8'))
str_encode = m.hexdigest()
print("MD5加密:", str_encode) # MD5加密: f0404c7b9bff0bde8d6df8b64759960f
四、安全哈希算法 SHAI
1. SHAI - JS实现
<!DOCTYPE html><script src="https://cdn.bootcss.com/crypto-js/3.1.9-1/crypto-js.js"></script><script>var str1 = 'i am xz';var str_encode = CryptoJS.SHA1(str1).toString(); // 注意:1是数字1alert(str_encode) // 0e9f44d42516562396d7b8923542a6a4fc29cd5c</script>
</html>
2. SHAI - Python实现
import hashlibsha1 = hashlib.sha1()
str1 = 'i am xz'
sha1.update(str1.encode())
str_encode = sha1.hexdigest()
print("SHAI加密:", str_encode) # SHAI加密: 0e9f44d42516562396d7b8923542a6a4fc29cd5c
五、散列消息鉴别码 HMAC
1.HMAC - JS实现
<!DOCTYPE html><script src="https://cdn.bootcss.com/crypto-js/3.1.9-1/crypto-js.js"></script><script>var key = 'key';var str1 = 'i am xz';var hash = CryptoJS.HmacSHA256(key, str1);var str_encode = CryptoJS.enc.Hex.stringify(hash);alert(str_encode) // '11a7960cd583ee2c3f1ed910dbc3b6c3991207cbc527d122f69e84d13cc5ce5c'</script>
</html>
2. HMAC - Python实现
import hmac
import hashlib
key = 'key'
str1 = 'i am xz'
mac = hmac.new(key=key.encode(), msg=str1.encode(), digestmod=hashlib.sha256)
mac.digest()
str_encode = mac.hexdigest()
print("HMAC加密:", str_encode) # HMAC加密: e5137adac855050a62c7434b01bb97229f9e1a8fd5b45364e4035d28885b0852
六、对称加密 AES、DES
1. AES,DES介绍
AES和DES的区别:加密后密文长度的不同,DES加密后密文长度是8的整数倍,AES加密后密文长度是16的整数倍;
特征:对称加密特征,加密和解密需要相同的密钥DES;
应用场景:企业级开发使用DES足够安全,要求高使用AES;
2. AES - JS实现
<html><script 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 xz"; // 需要加密的内容// 加密 DES/AES切换只需要修改 CryptoJS.AES <=> CryptoJS.DESvar encrypt = CryptoJS.AES.encrypt(message, CryptoJS.enc.Utf8.parse(aseKey), // 参数1=密钥, 参数2=加密内容{mode: CryptoJS.mode.ECB, // 为DES的工作方式padding: CryptoJS.pad.Pkcs7 // 当加密后密文长度达不到指定整数倍(8个字节、16个字节)则填充对应字符}).toString(); // toString=转字符串类型alert(encrypt); // 在弹窗中打印字符串 2vcsEDJv9vAZZLgFLjkZ9A==//解密var decrypt = CryptoJS.AES.decrypt(encrypt, CryptoJS.enc.Utf8.parse(aseKey), // 参数1=密钥, 参数2=解密内容{mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8); // toString=转字符串类型,并指定编码alert(decrypt); // "i am xz"</script>
</html>
3. DES - JS实现
<html><!-- 对称加密特征,加密和解密需要相同的密钥DES,AES--><script 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 xiaozhou ?"; // 需要加密的内容// 加密 DES/AES切换只需要修改 CryptoJS.AES <=> CryptoJS.DESvar encrypt = CryptoJS.DES.encrypt(message, CryptoJS.enc.Utf8.parse(aseKey), // 参数1=密钥, 参数2=加密内容{mode: CryptoJS.mode.ECB, // 为DES的工作方式padding: CryptoJS.pad.Pkcs7 // 当加密后密文长度达不到指定整数倍(8个字节、16个字节)则填充对应字符}).toString(); // toString=转字符串类型alert(encrypt); // 控制台打印 CDVNwmEwDRM//解密var decrypt = CryptoJS.DES.decrypt(encrypt, CryptoJS.enc.Utf8.parse(aseKey), // 参数1=密钥, 参数2=解密内容{mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8); // toString=转字符串类型,并指定编码alert(decrypt); // 控制台打印 "i am xiaozhou ?"</script>
</html>
4. DES - Python实现
pip 安装: pip intall pyDes -i https://pypi.tuna.tsinghua.edu.cn/simple
import binascii
from pyDes import des, CBC, PAD_PKCS5 deskey = '12345678'
message = 'i am xz'
des_encrypt = des(key=deskey, mode=CBC, IV=deskey, padmode=PAD_PKCS5)
str_encode = binascii.b2a_hex(des_encrypt.encrypt(message, padmode=PAD_PKCS5)) # .decode('utf-8')
print("DES加密:", str_encode) # DES加密: b'b8a5ac525c77aad0' str_decrypt = des(key=deskey, mode=CBC, IV=deskey, padmode=PAD_PKCS5)
str_decode = str_decrypt.decrypt(binascii.a2b_hex(str_encode), padmode=PAD_PKCS5)
print("DES解密:", str_decode) # DES解密: b'i am xz'
七、非对称加密RSA
1. RSA介绍
公私匙在线生成
应用场景:公开密钥加密和电子商业中RSA被广泛使用,支付密码会通过RSA加密;
2. JS-代码示例
<html><!-- 公私匙可以在线生成:http://web.chacuo.net/netrsakeypair --><!-- 非对称加密特征,加密使用公钥和解密使用私钥,公钥(可以公开暴露出来,只能加密)和私钥(必须隐藏)成对出现,公钥和私钥有着某种联系 RSA --><script src="https://cdn.bootcss.com/jsencrypt/3.0.0-beta.1/jsencrypt.js"></script><script type="text/javascript">// 公钥 私匙是通过公匙计算生成的,不能盲目设置var PUBLIC_KEY = '-----BEGIN PUBLIC KEY-----MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALyBJ6kZ/VFJYTV3vOC07jqWIqgyvHulv6us/8wzlSBqQ2+eOTX7s5zKfXY40yZWDoCaIGk+tP/sc0D6dQzjaxECAwEAAQ==-----END PUBLIC KEY-----';//私钥var PRIVATE_KEY = '-----BEGIN PRIVATE KEY-----MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEAvIEnqRn9UUlhNXe84LTuOpYiqDK8e6W/q6z/zDOVIGpDb545NfuznMp9djjTJlYOgJogaT60/+xzQPp1DONrEQIDAQABAkEAu7DFsqQEDDnKJpiwYfUE9ySiIWNTNLJWZDN/Bu2dYIV4DO2A5aHZfMe48rga5BkoWq2LALlY3tqsOFTe3M6yoQIhAOSfSAU3H6jIOnlEiZabUrVGqiFLCb5Ut3Jz9NN+5p59AiEA0xQDMrxWBBJ9BYq6RRY4pXwa/MthX/8Hy+3GnvNw/yUCIG/3Ee578KVYakq5pih8KSVeVjO37C2qj60d3Ok3XPqBAiEAqGPvxTsAuBDz0kcBIPqASGzArumljkrLsoHHkakOfU0CIDuhxKQwHlXFDO79ppYAPcVO3bph672qGD84YUaHF+pQ-----END PRIVATE KEY-----';//使用公钥加密var encrypt = new JSEncrypt();//实例化加密对象encrypt.setPublicKey(PUBLIC_KEY);//设置公钥var message = 'hello xiaozhou!' // 需要加密的数据 var encrypted = encrypt.encrypt(message);//对指定数据进行加密alert(encrypted) // 'JQ83h8tmJpsSZcb4BJ3eQvuqIAs3ejepcUUnoFhQEvum8fA8bf1Y/fG+DO1bSIVNJF6EOZKe4wa0njv6aOar9w=='//使用私钥解密var decrypt = new JSEncrypt(); // 创建解密对象decrypt.setPrivateKey(PRIVATE_KEY); //设置私钥var uncrypted = decrypt.decrypt(encrypted); //解密 'hello xiaozhou!'alert(uncrypted);</script><!-- 总结:可根据setPublicKey,setPrivateKey 确定是否为非对称RSA加密 -->
</html>
JS常见加密 AES、DES、RSA、MD5、SHAI、HMAC、Base64(编码) - Python/JS实现相关推荐
- aes加密算法python语言实现_python实现AES/DES/RSA/MD5/SM2/SM4/3DES加密算法模板汇总
都是作者累积的,且看其珍惜,大家可以尽量可以保存一下,如果转载请写好出处https://www.cnblogs.com/pythonywy 一.md5加密 1.简介 这是一种使用非常广泛的加密方式,不 ...
- JS逆向加密-Cryptojs库AES/DES/RSA等代码
目录 一.crypto-js 二.nodejs之md5.sha1.sha256.base64 三.crypto-js之AES 四.crypto-js之DES 五.crypto-js之3DES 六.Py ...
- 常见加密方式DES、AES
1. 对称加密 采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密. 示例: 我们现在有一个原文3要发送给B 设置密钥为108, 3 * 1 ...
- aes 256 ecb 加解密 pkcs7补全 python JS
python aes 256 ecb 加解密 功能 实现 Python ECB 256 JS版本 ECB 算法 JS版本 CBC 算法Pkcs7填充 SQL AES 在线验证网站 notice 功能 ...
- base64编码解码js
base64: html代码: <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"&g ...
- as3 crypto 加密解密des,rsa
des实例: <?xml version="1.0″ encoding="utf-8″?> <s:Application xmlns:fx="http: ...
- python可逆加密算法_常见加密方式及Python实现
由于计算机软件的非法复制,通信的泄密.数据安全受到威胁,所以加密在开发过程中是经常使用到的技术,在一些重要场景中都有所应用,如:登录.支付.oauth等,场景不同需要搭配不一样的签名加密算法来达到业务 ...
- Java 加密 AES 对称加密算法
版权声明:本文为博主原创文章,未经博主允许不得转载. [AES] 一种对称加密算法,DES的取代者. 加密相关文章见:Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES R ...
- python3 rsa加密_python3产生RSA秘钥对并执行加解密操作详解
加密使用的是公钥对数据进行加密,而且当你使用一把1024bit的rsa公钥的时候,你一次只能加密最多117byte的数据,如果数据量超过这个数,可能会涉及到对数据进行分段加密的问题.而且现在rsa 1 ...
最新文章
- 江湖急诏令:腾讯数据库王者挑战赛赏金万两募英豪!
- Error starting static Resources caused by project facet
- IEnumerable.OrderBy().First() 在 .netcore 3.1 中是否做了优化?
- org.hibernate.MappingException: Could not determine type for: java.util.List, at table: user, for...
- python中常见的运行时错误_新手常见Python运行时错误汇总
- RabbitMQ基本管理(下)
- java输入验证码代码,JavaWeb 实现验证码功能(demo)
- JAAS(Java 认证和授权服务)
- Mina MEID/GSM Activator 1.0 三网信号激活,支持iOS12.0~14.8.1
- 域名被污染解决方法及DNS污染清洗方法
- CyberSecurity Knowledge Base笔记
- dataframe 对象中统计每个列的所有数的和,或者每一行所有值的和
- 用JSP/Servlet构建三层式管理信息系统
- static(静态变量,方法)
- 豪沃轻abs12v电是什么系统_小汽车显示abs是什么问题,ABS系统介绍
- GoLand+Delve(dlv) 远程调试
- 现实中如何评判路遥《人生》中的高加林?
- 无需翻墙的Google瓦片地图地址
- 腾讯安全发布《银行业数据安全白皮书》 指明建设数据安全体系四大要素
- 我的世界服务器整人系列,整人新思路?《我的世界》人气最高的模组 好兄弟看完怀疑人生...
热门文章
- Yolov5-5.0源码分享以及环境配置——Yolov5训练及测试教程(超详细含数据集制作,格式转换,数据集划分)
- oracle12c数据库安装(静默安装)
- Oracle EBS OM Drop Ship Orders(直发业务)技术-API和核心表关联关系介绍
- php iframe referer,【技术分享】通过iframe注入实现referer欺骗
- 新能源控制器,新能源汽车车载双向OBC,PFC,LLC,V2G 双向 充电桩 电动汽车 车载充电机 充放电机 MATLAB仿真模型
- Jenkins Generic Webhook Trigger 插件使用
- 0/0型极限(等价无穷小)
- 0、‘0‘、‘\0‘的区分和联系
- SpringBoot(一)
- 两个阶跃函数相加或相减的傅里叶变换