-
2020-01-16 11:15:29
各种加密算法比较
算法选择:对称加密AES,非对称加密: ECC,消息摘要: MD5,数字签名:DSA
对称加密算法(加解密密钥相同)
名称
密钥长度
运算速度
安全性
资源消耗
DES
56位
较快
低
中
3DES
112位或168位
慢
中
高
AES
128、192、256位
快
高
低
非对称算法(加密密钥和解密密钥不同)
名称
成熟度
安全性(取决于密钥长度)
运算速度
资源消耗
RSA
高
高
慢
高
DSA
高
高
慢
只能用于数字签名
ECC
低
高
快
低(计算量小,存储空间占用小,带宽要求低)
散列算法比较
名称
安全性
速度
SHA-1
高
慢
MD5
中
快
对称与非对称算法比较
名称
密钥管理
安全性
速度
对称算法
比较难,不适合互联网,一般用于内部系统
中
快好几个数量级(软件加解密速度至少快100倍,每秒可以加解密数M比特数据),适合大数据量的加解密处理
非对称算法
密钥容易管理
高
慢,适合小数据量加解密或数据签名
算法选择(从性能和安全性综合)
对称加密: AES(128位),
非对称加密: ECC(160位)或RSA(1024),
消息摘要: MD5
数字签名:DSA
轻量级:TEA、RC系列(RC4),Blowfish (不常换密钥)
速度排名(个人估测,未验证):IDEA <DES <GASTI28<GOST<AES<RC4<TEA<Blowfish
简单的加密设计: 用密钥对原文做 异或,置换,代换,移位名称
数据大小(MB)
时间(s)
平均速度MB/S
评价
DES
256
10.5
22.5
低
3DES
256
12
12
低
AES(256-bit)
256
5
51.2
中
Blowfish
256
3.7
64
高
表5-3 单钥密码算法性能比较表
名称
实现方式
运算速度
安 全 性
改进措施
应用场合
DES
40-56bit
密钥
一般
完全依赖密钥,易受穷举搜索法攻击
双重、三重DES,AES
适用于硬件实现
IDEA
128bit密钥
8轮迭代
较慢
军事级,可抗差值分析和相关分析
加长字长为32bit、密钥为256bit,采用232 模加、232+1模乘
适用于ASIC设计
GOST
256bit密钥
32轮迭代
较快
军事级
加大迭代轮数
S盒可随机秘
密选择,便于软件实现
Blowfish
256-448bit
密钥、16轮迭代
最快
军事级、可通过改变密钥长度调整安全性
适合固定密钥场合,不适合常换密钥和智能卡
RC4
密钥长度可变
快DESl0倍
对差分攻击和线性攻击具有免疫能力,高度非线性
密钥长度放宽到64bit
算法简单,易于编程实现
RC5
密钥长度和迭代轮数均可变
速度可根据
三个参数的
值进行选择
六轮以上时即可抗线性攻击、通过调整字长、密钥长度和迭代轮数可以在安全性和速度上取得折中
引入数据相倚转
适用于不同字长的微处理器
CASTl28
密钥长度可变、16轮迭代
较快
可抵抗线性和差分攻击
增加密钥长度、形成CAST256
适用于PC机和
UNIX工作站
常见加密算法
1、DES(Data Encryption Standard):对称算法,数据加密标准,速度较快,适用于加密大量数据的场合;
2、3DES(Triple DES):是基于DES的对称算法,对一块数据用三个不同的密钥进行三次加密,强度更高;
3、RC2和RC4:对称算法,用变长密钥对大量数据进行加密,比 DES 快;
4、IDEA(International Data Encryption Algorithm)国际数据加密算法,使用 128 位密钥提供非常强的安全性;
5、RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的,非对称算法;
6、DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准),严格来说不算加密算法;
7、AES(Advanced Encryption Standard):高级加密标准,对称算法,是下一代的加密算法标准,速度快,安全级别高,在21世纪AES 标准的一个实现是 Rijndael 算法;
8、BLOWFISH,它使用变长的密钥,长度可达448位,运行速度很快;
9、MD5:严格来说不算加密算法,只能说是摘要算法;
10、PKCS:The Public-Key Cryptography Standards (PKCS)是由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议。
11、SSF33,SSF28,SCB2(SM1):国家密码局的隐蔽不公开的商用算法,在国内民用和商用的,除这些都不容许使用外,其他的都可以使用;
12、ECC(Elliptic Curves Cryptography):椭圆曲线密码编码学。
13、TEA(Tiny Encryption Algorithm)简单高效的加密算法,加密解密速度快,实现简单。但安全性不如DES,QQ一直用tea加密更多相关内容 -
M1卡片相关(读卡,写卡,加密算法)
2018-05-30 18:22:23M1卡信息 一张M1卡的存储量为1KB( 16扇区 * 4块 * 16字节 = 1024字节 = 1KB); 一张卡有16个扇区,每个扇区有4个块,每个块有16个字节的存储量。 1字节 = 8个二进制 = 2个16进制, 所以一个块的存储量为:16个...M1卡信息
- 一张M1卡的存储量为1KB( 16扇区 * 4块 * 16字节 = 1024字节 = 1KB);
- 一张卡有16个扇区,每个扇区有4个块,每个块有16个字节的存储量。
- 1字节 = 8个二进制 = 2个16进制,
所以一个块的存储量为:16个字节 = 128个二进制 = 32个16进制。 - 第0扇区的块0为厂商代码,已经固化。
每个扇区的块3为控制块,用来存放密码和控制权限 ,不能用来存储数据。
每个扇区的块0,块1,块2可以用来存储数据(扇区0的块0除外)。 - 每个扇区都有独立的密码和存取权限(存储在块3)。
读写卡流程
- 上电:使用卡片前需要上电,上电成功后可获取到卡的序列号,卡的类型等相关信息。
- 认证:认证需要:
A. 选择KeyA或者KeyB;
B. 认证的块;
C. SNR序列号:即Byte数组类型的卡序列号(上电后即可获取);
D. KeyA或者KeyB的值(默认12个F); - 读写块。
读写卡相关
理论部分
-
在认证过密码之后,可以对每个扇区的块0,块1,块2进行数据存储(扇区0的块0除外)。每个块能存储32个16进制的字符。
-
块3用来存储该扇区的密码和存储权限。
-
块3的前6个字节为KeyA,后6个字节为KeyB。中间的4个字节为存储控制。
-
存取控制的4个字节:
-
数据块(块0,块1,块2)的存取控制如下:
(计算出C10,C20,C30即可在下表中找出块0对应的权限)
-
控制块(块3)的存取控制如下:
(计算出C13,C23,C33即可在下表中找出块0对应的权限)
实践部分
- 如果一个扇区的块3的存储控制字节为: 08 77 8F 69
- 转为二进制即
6:0 0 0 0 1 0 0 0
7:0 1 1 1 0 1 1 1
8:1 0 0 0 1 1 1 1
字节9为备用字节,可忽略。 - 参照理论部分第4条,字节6全部取反, 字节7的低4位取反,得到:
C2Y:1111 C1Y:0111
C1Y:0111 C3Y:1000
C3Y:1000 C2Y:1111
对应块:3210 对应块:3210 - 高4位的各块值=低4位的各块值时,其值可用。高4位值≠低4位值时,其值不可用!
- C10 C20 C30 = C1Y C2Y C3Y = 1 1 0
所以块0的权限为:验证KeyA或者KeyB可读,可减值,可初始化,验证KeyB后可写,可加值。
C13 C23 C33 = C1Y C2Y C3Y = 0 1 1
所以块3的权限为:验证KeyA或者KeyB可读,验证KeyB后可写
所以扇区KeyA的权限为:KeyA 不可读,验证KeyB后可写
所以扇区KeyB的权限为:KeyB 不可读,验证KeyB后可写
-
Mifare_S50_S70_M1卡_解密算法.pdf
2021-12-17 22:38:33S50_S70_M1卡_解密算法,Cryptanalysis of Crypto-1,原版加密解密算法文档.本人根据此文档,用单片机成功设计出能通过密码读写M1卡的方案。 -
常用的加密算法
2021-02-11 09:21:48常见的加密算法可以分成三类,对称加密算法,非对称加密算法和Hash算法。 对称加密 指加密和解密使用相同密钥的加密算法。对称加密算法的优点在于加解密的高速度和使用长密钥时的难破解性。假设两个用户需要使用...常见的加密算法可以分成三类,对称加密算法,非对称加密算法和Hash算法。
对称加密
指加密和解密使用相同密钥的加密算法。对称加密算法的优点在于加解密的高速度和使用长密钥时的难破解性。假设两个用户需要使用对称加密方法加密然后交换数据,则用户最少需要2个密钥并交换使用,如果企业内用户有n个,则整个企业共需要n×(n-1) 个密钥,密钥的生成和分发将成为企业信息部门的恶梦。对称加密算法的安全性取决于加密密钥的保存情况,但要求企业中每一个持有密钥的人都保守秘密是不可能的,他们通常会有意无意的把密钥泄漏出去——如果一个用户使用的密钥被入侵者所获得,入侵者便可以读取该用户密钥加密的所有文档,如果整个企业共用一个加密密钥,那整个企业文档的保密性便无从谈起。
常见的对称加密算法:DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6和AES
非对称加密
指加密和解密使用不同密钥的加密算法,也称为公私钥加密。假设两个用户要加密交换数据,双方交换公钥,使用时一方用对方的公钥加密,另一方即可用自己的私钥解密。如果企业中有n个用户,企业需要生成n对密钥,并分发n个公钥。由于公钥是可以公开的,用户只要保管好自己的私钥即可,因此加密密钥的分发将变得十分简单。同时,由于每个用户的私钥是唯一的,其他用户除了可以可以通过信息发送者的公钥来验证信息的来源是否真实,还可以确保发送者无法否认曾发送过该信息。非对称加密的缺点是加解密速度要远远慢于对称加密,在某些极端情况下,甚至能比非对称加密慢上1000倍。
常见的非对称加密算法:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)
Hash算法
Hash算法特别的地方在于它是一种单向算法,用户可以通过Hash算法对目标信息生成一段特定长度的唯一的Hash值,却不能通过这个Hash值重新获得目标信息。因此Hash算法常用在不可还原的密码存储、信息完整性校验等。
常见的Hash算法:MD2、MD4、MD5、HAVAL、SHA、SHA-1、HMAC、HMAC-MD5、HMAC-SHA1
加密算法的效能通常可以按照算法本身的复杂程度、密钥长度(密钥越长越安全)、加解密速度等来衡量。上述的算法中,除了DES密钥长度不够、MD2速度较慢已逐渐被淘汰外,其他算法仍在目前的加密系统产品中使用。
加密算法的选择
前面的章节已经介绍了对称解密算法和非对称加密算法,有很多人疑惑:那我们在实际使用的过程中究竟该使用哪一种比较好呢?
我们应该根据自己的使用特点来确定,由于非对称加密算法的运行速度比对称加密算法的速度慢很多,当我们需要加密大量的数据时,建议采用对称加密算法,提高加解密速度。
对称加密算法不能实现签名,因此签名只能非对称算法。
由于对称加密算法的密钥管理是一个复杂的过程,密钥的管理直接决定着他的安全性,因此当数据量很小时,我们可以考虑采用非对称加密算法。
在实际的操作过程中,我们通常采用的方式是:采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,这样我们就集成了两类加密算法的优点,既实现了加密速度快的优点,又实现了安全方便管理密钥的优点。
如果在选定了加密算法后,那采用多少位的密钥呢?一般来说,密钥越长,运行的速度就越慢,应该根据的我们实际需要的安全级别来选择,一般来说,RSA建议采用1024位的数字,ECC建议采用160位,AES采用128为即可。
二. 加密算法介绍
对称加密算法
对称加密算法用来对敏感数据等信息进行加密,常用的算法包括:
DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合。
3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高。
AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高;
AES与3DES的比较
算法名称
算法类型
密钥长度
速度
解密时间(建设机器每秒尝试255个密钥)
资源消耗
AES
对称block密码
128、192、256位
高
1490000亿年
低
3DES
对称feistel密码
112位或168位
低
46亿年
中
RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的;
DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准);
ECC(Elliptic Curves Cryptography):椭圆曲线密码编码学。
ECC和RSA相比,在许多方面都有对绝对的优势,主要体现在以下方面:
抗攻击性强。相同的密钥长度,其抗攻击性要强很多倍。
计算量小,处理速度快。ECC总的速度比RSA、DSA要快得多。
存储空间占用小。ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多,意味着它所占的存贮空间要小得多。这对于加密算法在IC卡上的应用具有特别重要的意义。
带宽要求低。当对长消息进行加解密时,三类密码系统有相同的带宽要求,但应用于短消息时ECC带宽要求却低得多。带宽要求低使ECC在无线网络领域具有广泛的应用前景。
下面两张表示是RSA和ECC的安全性和速度的比较。
攻破时间(MIPS年)
RSA/DSA(密钥长度)
ECC密钥长度
RSA/ECC密钥长度比
104
512
106
5:1
108
768
132
6:1
1011
1024
160
7:1
1020
2048
210
10:1
1078
21000
600
35:1
攻破时间(MIPS年)
RSA/DSA(密钥长度)
ECC密钥长度
RSA/ECC密钥长度比
104
512
106
5:1
108
768
132
6:1
1011
1024
160
7:1
1020
2048
210
10:1
1078
21000
600
35:1
RSA和ECC安全模长得比较
功能
Security Builder 1.2
BSAFE 3.0
163位ECC(ms)
1,023位RSA(ms)
密钥对生成
3.8
4,708.3
签名
2.1(ECNRA)
228.4
3.0(ECDSA)
认证
9.9(ECNRA)
12.7
10.7(ECDSA)
Diffie—Hellman密钥交换
7.3
1,654.0
RSA和ECC速度比较
散列是信息的提炼,通常其长度要比信息小得多,且为一个固定长度。加密性强的散列一定是不可逆的,这就意味着通过散列结果,无法推出任何部分的原始信息。任何输入信息的变化,哪怕仅一位,都将导致散列结果的明显变化,这称之为雪崩效应。散列还应该是防冲突的,即找不出具有相同散列结果的两条信息。具有这些特性的散列结果就可以用于验证信息是否被修改。
单向散列函数一般用于产生消息摘要,密钥加密等,常见的有:
l MD5(Message Digest Algorithm 5):是RSA数据安全公司开发的一种单向散列算法,非可逆,相同的明文产生相同的密文。
l SHA(Secure Hash Algorithm):可以对任意长度的数据运算生成一个160位的数值;
SHA-1与MD5的比较
因为二者均由MD4导出,SHA-1和MD5彼此很相似。相应的,他们的强度和其他特性也是相似,但还有以下几点不同:
l 对强行供给的安全性:最显著和最重要的区别是SHA-1摘要比MD5摘要长32 位。使用强行技术,产生任何一个报文使其摘要等于给定报摘要的难度对MD5是2128数量级的操作,而对SHA-1则是2160数量级的操作。这样,SHA-1对强行攻击有更大的强度。
l 对密码分析的安全性:由于MD5的设计,易受密码分析的攻击,SHA-1显得不易受这样的攻击。
l 速度:在相同的硬件上,SHA-1的运行速度比MD5慢。
以上综述了两种加密方法的原理,总体来说主要有下面几个方面的不同:
l 在管理方面:公钥密码算法只需要较少的资源就可以实现目的,在密钥的分配上,两者之间相差一个指数级别(一个是n一个是n2)。所以私钥密码算法不适应广域网的使用,而且更重要的一点是它不支持数字签名。
l 在安全方面:由于公钥密码算法基于未解决的数学难题,在破解上几乎不可能。对于私钥密码算法,到了AES虽说从理论来说是不可能破解的,但从计算机的发展角度来看。公钥更具有优越性。
l 从速度上来看:AES的软件实现速度已经达到了每秒数兆或数十兆比特。是公钥的100倍,如果用硬件来实现的话这个比值将扩大到1000倍。
由于非对称加密算法的运行速度比对称加密算法的速度慢很多,当我们需要加密大量的数据时,建议采用对称加密算法,提高加解密速度。
对称加密算法不能实现签名,因此签名只能非对称算法。
由于对称加密算法的密钥管理是一个复杂的过程,密钥的管理直接决定着他的安全性,因此当数据量很小时,我们可以考虑采用非对称加密算法。
在实际的操作过程中,我们通常采用的方式是:采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,这样我们就集成了两类加密算法的优点,既实现了加密速度快的优点,又实现了安全方便管理密钥的优点。
那采用多少位的密钥呢? RSA建议采用1024位的数字,ECC建议采用160位,AES采用128为即可。
保密通信:保密通信是密码学产生的动因。使用公私钥密码体制进行保密通信时,信息接收者只有知道对应的密钥才可以解密该信息。
数字签名:数字签名技术可以代替传统的手写签名,而且从安全的角度考虑,数字签名具有很好的防伪造功能。在政府机关、军事领域、商业领域有广泛的应用环境。
秘密共享:秘密共享技术是指将一个秘密信息利用密码技术分拆成n个称为共享因子的信息,分发给n个成员,只有k(k≤n)个合法成员的共享因子才可以恢复该秘密信息,其中任何一个或m(m≤k)个成员合作都不知道该秘密信息。利用秘密共享技术可以控制任何需要多个人共同控制的秘密信息、命令等。
认证功能:在公开的信道上进行敏感信息的传输,采用签名技术实现对消息的真实性、完整性进行验证,通过验证公钥证书实现对通信主体的身份验证。
密钥管理:密钥是保密系统中更为脆弱而重要的环节,公钥密码体制是解决密钥管理工作的有力工具;利用公钥密码体制进行密钥协商和产生,保密通信双方不需要事先共享秘密信息;利用公钥密码体制进行密钥分发、保护、密钥托管、密钥恢复等。
基于公钥密码体制可以实现以上通用功能以外,还可以设计实现以下的系统:安全电子商务系统、电子现金系统、电子选举系统、电子招投标系统、电子彩票系统等。
一. AES对称加密:
AES加密
分组
二. 分组密码的填充
分组密码的填充e.g.:
PKCS#5填充方式
三. 流密码:
四. 分组密码加密中的四种模式:
3.1 ECB模式
优点:
1.简单;
2.有利于并行计算;
3.误差不会被传送;
缺点:
1.不能隐藏明文的模式;
2.可能对明文进行主动攻击;
3.2 CBC模式:优点:
1.不容易主动攻击,安全性好于ECB,适合传输长度长的报文,是SSL、IPSec的标准。
缺点:
1.不利于并行计算;
2.误差传递;
3.需要初始化向量IV
3.3 CFB模式:
优点:1.隐藏了明文模式;
2.分组密码转化为流模式;
3.可以及时加密传送小于分组的数据;
缺点:
1.不利于并行计算;
2.误差传送:一个明文单元损坏影响多个单元;
3.唯一的IV;
3.4 OFB模式:
优点:1.隐藏了明文模式;
2.分组密码转化为流模式;
3.可以及时加密传送小于分组的数据;
缺点:
1.不利于并行计算;
2.对明文的主动攻击是可能的;
3.误差传送:一个明文单元损坏影响多个单元;
原文链接: https://blog.csdn.net/baidu_22254181/article/details/82594072
-
RSA加密算法
2013-11-24 21:42:25RSA加密算法 对文档进行加密 public void inputPQ() throws Exception { do { System.out.println("请输入素数p: "); BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); ... -
Python实现常见的加密算法
2020-08-11 18:16:26文章目录一、什么叫数据加密二、数据加密的方式三、加密算法1、单向加密算法(MD5、sha系列)2、对称加密算法(AES、DES)3、非对称加密算法(RSA、DSA)4、补充算法(base64) 一、什么叫数据加密 数据加密是指利用...文章目录
一、什么叫数据加密
数据加密是指利用加密算法和秘钥将明文转变为密文的过程。常见的加密方式有 base64 RSA MD5 SHA-1,HMAC,DES/AES,ECC
二、数据加密的方式
1、单向加密
指只能加密数据而不能解密数据,这种加密方式主要是为了保证数据的完整性,常见的加密算法有MD5、sha系列等(位于python内置的hashlib模块中)。
2、对称加密
指数据加密和解密使用相同的秘钥,这种加密方式主要是为了保证数据的机密性,常见的加密算法有DES、AES(位于python第三方库pycrytodomex中)。
3、非对称加密
也叫公钥加密,指数据加密和解密使用不同的密钥,这种加密方式基本不可能被破解,主要用于身份验证等方面,常见的加密算法有DSA、RSA(位于python第三方模块rsa中)。
三、加密算法
1、单向加密算法(MD5、sha系列)不可逆
MD5加密:
MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。md5加密算法是不可逆的,所以解密一般都是通过暴力穷举方法,通过网站的接口实现解密。
Python实现MD5import hashlib m = hashlib.md5() m.update(str.encode("utf8")) print(m.hexdigest())
sha加密
安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA),SHA1比MD5的安全性更强。对于长度小于2^ 64位的消息,SHA1会产生一个160位的消息摘要。import hashlib sha1 = hashlib.sha1() data = 'helloword' sha1.update(data.encode('utf-8')) sha1_data = sha1.hexdigest() print(sha1_data)
2、对称加密算法(AES、DES)
- 安装第三方库:
pip install pycryptodomex -i https://pypi.douban.com/simple
常见对称密码在 Crypto.Cipher 库下,主要有:DES DES3 AES。按照时间发展顺序是:DES->DES3->AES
非对称密码在 Crypto.PublicKey 库下,主要有:RSA ECC DSA
哈希密码(单向加密)在 Crypto.Hash 库下,常用的有:MD5 SHA-1 SHA-128 SHA-256
随机数在 Crypto.Random 库下
实用小工具在 Crypto.Util 库下
数字签名在 Crypto.Signature 库下 - DES加密
DES是一个分组加密算法,典型的DES以64位为分组对数据加密,加密和解密用的是同一个算法。它的密钥长度是56位(因为每个第8 位都用作奇偶校验),密钥可以是任意的56位的数,而且可以任意时候改变。
from Cryptodome.Cipher import DES key = b'88888888' data = "Good Good Study! Day Day Up!" count = 8 - (len(data) % 8) plaintext = data + count * "=" des = DES.new(key, DES.MODE_ECB) ciphertext = des.encrypt(plaintext.encode()) print(ciphertext) # b'D\xa4Z\x1dt\xba\xf3\xe8\xdbv\x1aP\x81\xe4\xe6Jx?\xfe\xf2\x0b\x82\nG\x08d\xea\xd0\t\x07vs' plaintext = des.decrypt(ciphertext) plaintext = plaintext[:(len(plaintext)-count)] print(plaintext) # b'Good Good Study! Day Day Up!'
- AES 加密
在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES
目前使用的比较广泛,一串看不懂的字符串如果有 / 我们首先想到的是aes加密AES 只是个基本算法,实现 AES 有几种模式,主要有 ECB、CBC、CFB 和 OFB 这几种(其实还有个 CTR)。本章主要介绍最常用的 ECB 和 CBC 模式。
AES为分组密码,分组密码也就是把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文。在AES标准规范中,分组长度只能是128位,也就是说,每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。密钥的长度不同,推荐加密轮数也不同。
AESECB模式加密方法Python实现****from Crypto.Cipher import AES import base64 BLOCK_SIZE = 16 # Bytes pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * \ chr(BLOCK_SIZE - len(s) % BLOCK_SIZE) unpad = lambda s: s[:-ord(s[len(s) - 1:])] def aesEncrypt(key, data): ''' AES的ECB模式加密方法 :param key: 密钥 :param data:被加密字符串(明文) :return:密文 ''' key = key.encode('utf8') # 字符串补位 data = pad(data) cipher = AES.new(key, AES.MODE_ECB) # 加密后得到的是bytes类型的数据,使用Base64进行编码,返回byte字符串 result = cipher.encrypt(data.encode()) encodestrs = base64.b64encode(result) enctext = encodestrs.decode('utf8') print(enctext) return enctext def aesDecrypt(key, data): ''' :param key: 密钥 :param data: 加密后的数据(密文) :return:明文 ''' key = key.encode('utf8') data = base64.b64decode(data) cipher = AES.new(key, AES.MODE_ECB) # 去补位 text_decrypted = unpad(cipher.decrypt(data)) text_decrypted = text_decrypted.decode('utf8') print(text_decrypted) return text_decrypted if __name__ == '__main__': key = '5c44c819appsapi0' data = 'herish acorn' ecdata = aesEncrypt(key, data) aesDecrypt(key, ecdata)
AESCBC模式加密方法Python实现****
from Crypto.Cipher import AES import base64 # 密钥(key), 密斯偏移量(iv) CBC模式加密 BLOCK_SIZE = 16 # Bytes pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * \ chr(BLOCK_SIZE - len(s) % BLOCK_SIZE) unpad = lambda s: s[:-ord(s[len(s) - 1:])] vi = '0102030405060708' # 偏移量 def AES_Encrypt(key, data): data = pad(data) # 字符串补位 cipher = AES.new(key.encode('utf8'), AES.MODE_CBC, vi.encode('utf8')) encryptedbytes = cipher.encrypt(data.encode('utf8')) # 加密后得到的是bytes类型的数据,使用Base64进行编码,返回byte字符串 encodestrs = base64.b64encode(encryptedbytes) # 对byte字符串按utf-8进行解码 enctext = encodestrs.decode('utf8') return enctext def AES_Decrypt(key, data): data = data.encode('utf8') encodebytes = base64.decodebytes(data) # 将加密数据转换位bytes类型数据 cipher = AES.new(key.encode('utf8'), AES.MODE_CBC, vi.encode('utf8')) text_decrypted = cipher.decrypt(encodebytes) # 去补位 text_decrypted = unpad(text_decrypted) text_decrypted = text_decrypted.decode('utf8') print(text_decrypted) return text_decrypted if __name__ == '__main__': key = '5c44c819appsapi0' data = 'herish acorn' enctext = AES_Encrypt(key, data) print(enctext) AES_Decrypt(key, enctext)
3、非对称加密算法(RSA、DSA)
- 安装第三方库:
pip install rsa -i https://pypi.douban.com/simple
RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。它被普遍认为是目前最优秀的公钥方案之一。RSA是第一个能同时用于加密和数字签名的算法,它能够抵抗到目前为止已知的所有密码攻击。
加密和解密使用不同的秘钥。 一把作为公开的公钥,另一把作为私钥。这对密钥中的公钥进行加密,私钥用于解密。 事实上,公钥加密算法很少用于数据加密,它通常只是用来做身份认证,因为它的密钥太长,加密速度太慢–公钥加密算法的速度甚至比对称加密算法的速度慢上3个数量级(1000倍)。
import rsa # 返回 公钥加密、私钥解密 public_key, private_key = rsa.newkeys(1024) print(public_key) # PublicKey(115358647593237027749555219330290547595292720354379729059572469455025379115527291514465303947468690370446593609121177089794716265226101498361786298396410892325533861129676356325971818358112602498513419680609056457389715318966834362898086552554130435425753061655286667511557573410756120684188042377774434444807, 65537) print(private_key) # PrivateKey(115358647593237027749555219330290547595292720354379729059572469455025379115527291514465303947468690370446593609121177089794716265226101498361786298396410892325533861129676356325971818358112602498513419680609056457389715318966834362898086552554130435425753061655286667511557573410756120684188042377774434444807, 65537, 111285529956928522901721617280604228002764723117703733926382810265271061290888840676549733913221737511493431004615227720952917381576663793443813612330045581626681883557204892676718975967265771623672679503776812616315334112382868415864141371197836942710738341439472967902074841400226409659228441303650822610777, # 38470842708546405208704625508367712891471208299333441783981501073550023095274000403563916879641908231011170773153102126825952183163444780110955065002626432268349573, 2998599444966402616240989100234166167805477168671480027322013770416359562366030923233399853472241710845190991402502764232214027989568380839340059) plaintext = b"15863274538" ciphertext = rsa.encrypt(plaintext, public_key) print(ciphertext) # b'\x04\xb3ri\x1e\nA\xfb\x94\xff\xde{HtNw\xd4Q{\xdeRJ\xe0Fwl\x97kL\xde\xe6m\xc1\x8f\xd4\t\x96=\xb62\xad\x02\xfe\xeb4\xb4i\x8f\x9e\x0fp\x10\xbe\x8fiNrrUB\xbc\xe3\x87Q-\xe2\xa5\x86\xd9\x0b6,.\x90\xa1\xa6\x80\xf3\xaa\xcc\xdf7!\xdcp\xea\x0eE_?$\x8b\xcd\xb2\xca\x18\xf9e\xb5\x9b^\x84CcU\xe5.\xaeeFlz\xdeh\xb8\xa3D\xcb\xb6\xd5\x02\xe38\x98\xc80#Q' plaintext = rsa.decrypt(ciphertext, private_key) print(plaintext) # b'15863274538' # 私钥加签、公钥验签 plaintext = b"15863274538" sign_message = rsa.sign(plaintext, private_key, "MD5") plaintext = b"15863274538" method = rsa.verify(b"15863274532", sign_message, public_key) print(method) # rsa.pkcs1.VerificationError: Verification failed
4、补充算法(base64)
目前Base64已经成为网络上常见的传输8Bit字节代码的编码方式之一。在做支付系统时,系统之间的报文交互都需要使用Base64对明文进行转码,然后再进行签名或加密,之后再进行(或再次Base64)传输。Base64在URL、Cookie、网页传输少量二进制文件中也有相应的使用。
复制代码 from base64 import b64encode, b64decode plaintext = "我的银行卡密码是020012" ciphertext = b64encode(plaintext.encode()) print(ciphertext) # b'5oiR55qE6ZO26KGM5Y2h5a+G56CB5pivMDIwMDEy' plaintext = b64decode(ciphertext) print(plaintext) # b'\xe6\x88\x91\xe7\x9a\x84\xe9\x93\xb6\xe8\xa1\x8c\xe5\x8d\xa1\xe5\xaf\x86\xe7\xa0\x81\xe6\x98\xaf020012' print(plaintext.decode()) # 我的银行卡密码是020012
- 安装第三方库:
-
区块链加密算法总结
2020-06-14 17:33:15文章目录1、对称加密DES(Data EncryptionStandard)3DES(Triple DES)AES(Advanced EncryptionStandard)2、非对称加密RSA加密法DSA(Digital SignatureAlgorithm)ECC(Elliptic CurvesCryptography)应用数字签名其他场景... -
IC卡 M1卡 各个扇区 控制块 密码 详解
2021-11-02 14:48:39无电源,自带天线,工作频率为13.56MHZ.M1卡内含加密控制逻辑和通讯逻辑电路。M1卡主要有两种,一种是S50和一种是S70。主要应用:门禁、考勤、会议签到、身份识别、物流、工业自动化、各种会员卡、如售饭、地铁、... -
M1卡一卡一密码的自动化实现
2020-08-16 07:47:14每张卡出厂在扇区0,都有UID,读取UID是不要密码的,因此可以根据uid的4个字节进行加密,生成AB密码,密码的生成有多种方式,分区间,取余取整,等等计算。这样破解也只是破解一张卡密码。 -
常见对称加密算法
2019-04-10 09:13:49目前在后台架构中,常用的有对称加密算法和飞对称加密算法。 + 加密应用场景:敏感信息加密,比如,证件号码,银行卡账号,邮件信息,聊天记录cookie信息,私钥保护等等。 常见的对称加密算法有: 常用算法介绍 ... -
RC522芯片资料打包(软硬件设计+加密算法)
2019-03-18 18:40:291. MFRC522芯片手册、M1卡芯片手册; 2. STM32F1系列单片机与RC522通讯所有例程; 3. MSP430单片机与RC522通讯例程; 4. 天线设计指南; 5. 加密算法; -
paillier加密算法原理详解
2020-12-29 16:27:43paillier加密算法是一种公钥加密算法,基于复合剩余类的困难问题。满足加法同态,即密文相乘等于明文相加:D(E(m1)·E(m2))=m1+m2。这里详细介绍其加密解密是如何推导的,需要具备数论、代数系统、模运算的相关知识... -
M1卡操作
2019-03-01 08:56:54最近公司的一个小项目,使用的M1卡,这里是对这几天的一个总结! 首先根绝项目提供的手册,简单介绍一下M1卡的构成: 1 :分为16个扇区,每个扇区为4块,每块16个字节,以块为存取单位 2 &amp;nbsp;:每... -
【IoT】加密与安全:几种常用安全加密算法原理与用途解析
2018-12-05 16:43:081、常用的加密算法分类 常见的加密算法可以分成五类: 对称加密算法、非对称加密算法和、Hash 算法(也称摘要算法)、数字签名(Hash&RSA)和数字证书(Hash&RSA&CA)。 1)对称加密算法... -
一卡通(M1卡)破解过程记录——理论篇
2020-11-19 15:09:22其他几篇:一卡通(M1卡)破解过程记录——准备篇 获取扇区密钥 数据分析篇 理论篇参考了国内外的一些文献,写的比较杂乱,如有错误请指正,有条件的推荐去谷歌一些外文文献了解其原理,如《Attack.MIFARE》、... -
SSL常见加密算法
2018-08-03 18:16:29随着信息化和数字化社会的发展,人们对信息安全和保密的重要性认识不断提高,于是在1997年,美国国家标准局公布实施了“美国数据加密标准(DES)”,民间力量开始全面介入密码学的研究和应... -
信息安全(一):RSA加密算法
2021-10-19 16:57:05我可能会回答"公钥加密算法"。 因为它是计算机通信安全的基石,保证了加密数据不会被破解。你可以想象一下,信用卡交易被破解的后果。 进入正题之前,我先简单介绍一下,什么是"公钥加密算法"。 一、一点历史 ... -
加密算法
2015-12-15 09:18:531、MD5加密算法 概念:MD5 (Message Digest Algorithm MD5消息摘要算法第五版),为计算机安全领域的一种散列函数(杂凑算法/摘要算法/哈希算法),用以提供完整性保护。 作用:MD5的作用是让大容量... -
加密算法(DES,AES,RSA,ECC,MD5,SHA1)简介
2020-11-03 21:55:17加密算法(DES,AES,RSA,MD5,SHA1)简介一、对称性加密算法二、非对称算法三、散列算法四、算法举例1、对称性加密算法有:AES、DES、3DES1.1、DES(Data Encryption Standard)1.2、3DES(Triple DES)1.3、 AES... -
常见的三大加密算法
2018-03-19 16:50:16加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。 加密建立在对信息进行数学编码和解码的基础上。加密类型分为两种,对称加密... -
加密算法介绍及加密算法的选择
2015-09-22 13:57:46加密算法介绍 一. 密码学简介 据记载,公元前400年,古希腊人发明了置换密码。1881年世界上的第一个电话保密专利出现。在第二次世界大战期间,德国军方启用“恩尼格玛”密码机,密码学在战争中起着非常重要的... -
【国产加密算法-java实现SM3】
2022-01-07 23:44:22国产加密算法-java实现SM3 一、国产加密算法介绍 国家商用密码管理办公室制定了一系列密码标准,包括SM1(SCB2)、SM2、SM3、SM4、SM7、SM9、祖冲之密码算法(ZUC)那等等。 其中SM1、SM4、SM7、祖冲之密码(ZUC)是... -
浅谈IC卡、ID卡、M1卡和CPU卡
2020-01-10 11:19:30在工作中经常遇到IC卡、ID卡、M1卡和CPU卡,一直很疑惑他们有什么联系和区别,现在把我认为的理解整理一下,以便于以后又模糊了提醒自己(当然也有可能不对,只代表本人观点)。 由于在工作中我基本上目前接触到... -
加密算法(DES,AES,RSA,MD5,SHA1,Base64)比较和项目应用, 各种加密算法比较
2018-08-20 15:37:03加密算法(DES,AES,RSA,MD5,SHA1,Base64)比较和项目应用 - sochishun - 博客园 https://www.cnblogs.com/sochishun/p/7028056.html 加密算法(DES,AES,RSA,MD5,SHA1,Base64)比较和项目应用 加密技术通常... -
m1卡工作原理和相关总结
2017-05-23 14:16:02m1卡相关总结 -
校园水卡M1卡破解写卡
2018-07-03 14:02:59M1卡说明及使用proxmark3破解方法看了网上写的一些关于M1卡的文章,多数有些误导之嫌。首先谈谈M1卡的规格,M1卡的容量为1KB,好多网上写8KB,这里其实是有个误区,应该是8K位。1Byte=1B=8位。其实也就是说8k位想到...