安全加解密引擎基础(SKE DES/3DES)
关键词:DES、3DES、ECB、CBC、CFB、OFB、CTR等等。
1 基本概念
DES介绍
DES是对称性加密里常见的一种,是一种使用秘钥加密的块算法。秘钥长度是64位(bit), 超过位数秘钥被忽略。所谓对称性加密,加密和解密秘钥相同。对称性加密一般会按照固定长度,把待加密字符串分成块。不足一整块或者刚好最后有特殊填充字符。
常见的填充模式有:'pkcs5'、'pkcs7'、'iso10126'、'ansix923'、'zero' 类型,包括DES-ECB、DES-CBC、DES-CTR、DES-OFB、DES-CFB。
DES基本原则
DES算法原理
DES算法的入口参数:Key、Data、Mode。
Key为8个字节共64位,是DES算法的工作秘钥;
Data也为8个字节64位,是要被加密或解密的数据;
Mode为DES的工作方式,有两种:加密或解密。
DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位,其算法主要分为两步:
(1)初始置换(2)逆置换
经过16次迭代运算后,得到L16、R16,将此作为输入,进行逆置换,逆置换正好是初始置换的逆运算,由此即得到密文输出。
3DES介绍
DES和3DES对比
2 OpenSSL关于DES/3DES用法
OpenSSL通过openssl enc进行加密解密,
openssl enc -des-cbc -e -k 1234567812345678 -iv 1234567812345678 -pbkdf2 -in infile -out cipherfile openssl enc -des-cbc -d -k 1234567812345678 -iv 1234567812345678 -pbkdf2 -in cipherfile -out replain
其中-des-cbc是算法和模式组合,-e表示Encrypt,-d表示Decrypt。
DES/3DES支持的算法和模式组合包括:
des-cbc DES in CBC mode des Alias for des-cbc des-cfb DES in CFB mode des-ofb DES in OFB mode des-ecb DES in ECB mode des-ede-cbc Two key triple DES EDE in CBC mode des-ede Two key triple DES EDE in ECB mode des-ede-cfb Two key triple DES EDE in CFB mode des-ede-ofb Two key triple DES EDE in OFB mode des-ede3-cbc Three key triple DES EDE in CBC mode des-ede3 Three key triple DES EDE in ECB mode des3 Alias for des-ede3-cbc des-ede3-cfb Three key triple DES EDE CFB mode des-ede3-ofb Three key triple DES EDE in OFB mode
更多参考:
《OpenSSL之3DES用法》
3 PyCryptodome关于DES/3DES用法
DES的密文或明文需要满足63bit,即8Byte对齐。
DES的秘钥固定为64bit。
from Crypto.Cipher import DES from Crypto import Random def des_encrypt_decrypt(mode): key = b"Eightkey" des_encrypt = DES.new(key, mode) plaintext = "Some data to be encrypted with 3DES.PPPP" ciphertext = des_encrypt.encrypt(plaintext.encode()) des_decrypt = DES.new(key, mode) replaintext = des_decrypt.decrypt(ciphertext) print("Plain text:",plaintext.encode('utf-8').hex()) print("Cipher text:", ciphertext.hex()) print("Replain text:", replaintext.hex()) def des_encrypt_decrypt_iv(mode, iv): key = b"Eightkey" des_encrypt = DES.new(key, mode, iv) plaintext = "Some data to be encrypted with 3DES.PPPP" ciphertext = des_encrypt.encrypt(plaintext.encode('utf-8')) des_decrypt = DES.new(key, mode, iv) replaintext = des_decrypt.decrypt(ciphertext) print("Plain text:",plaintext.encode('utf-8').hex()) print("Cipher text:", ciphertext.hex()) print("Replain text:", replaintext.hex()) if __name__ == '__main__': iv = Random.new().read(DES.block_size) nonce = Random.new().read(8) des_encrypt_decrypt(DES.MODE_ECB) des_encrypt_decrypt_iv(DES.MODE_CBC, iv) des_encrypt_decrypt_iv(DES.MODE_CFB, iv) des_encrypt_decrypt_iv(DES.MODE_OFB, iv)
DES3的密文或明文输入需要满足64bit,即8Byte对齐。
秘钥输入需满足128bit或192bit,即16Byte或24Byte。
from Crypto.Cipher import DES3 from Crypto import Random def des3_encrypt_decrypt(mode): key = "Sixteen byte key" des3_encrypt = DES3.new(key, mode) plaintext = "Some data to be encrypted with 3DES.PPPP" ciphertext = des3_encrypt.encrypt(plaintext.encode('utf-8')) des3_decrypt = DES3.new(key, mode) replaintext = des3_decrypt.decrypt(ciphertext) print("Plain text:",plaintext.encode('utf-8').hex()) print("Cipher text:", ciphertext.hex()) print("Replain text:", replaintext.hex()) def des3_encrypt_decrypt_iv(mode, iv): key = "Sixteen byte key" des3_encrypt = DES3.new(key, mode, iv) plaintext = "Some data to be encrypted with 3DES.PPPP" ciphertext = des3_encrypt.encrypt(plaintext.encode('utf-8')) des3_decrypt = DES3.new(key, mode, iv) replaintext = des3_decrypt.decrypt(ciphertext) print("Plain text:",plaintext.encode('utf-8').hex()) print("Cipher text:", ciphertext.hex()) print("Replain text:", replaintext.hex()) if __name__ == '__main__': iv = Random.new().read(DES3.block_size) des3_encrypt_decrypt(DES3.MODE_ECB) des3_encrypt_decrypt_iv(DES3.MODE_CBC, iv) des3_encrypt_decrypt_iv(DES3.MODE_CFB, iv) des3_encrypt_decrypt_iv(DES3.MODE_OFB, iv)
更多参考:
《Single DES — PyCryptodome 3.14.1 documentation》-PyCryptodome关于DES介绍。
《Triple DES — PyCryptodome 3.14.1 documentation》-PyCryptodome关于3DES介绍。
转载请注明出处:http://www.hrtxgs.com/article/20230505/512947.html
随机推荐
-
安全狗下加用户的又一方法
上次发了安全狗下加用户的另一方法,据说不够风骚所以这次要淫荡一点 方法同样很简单,不过不知道有没有人发过。。PS: 转载请不要注明作者 001 测试环境: 安全狗的进程: .安全狗的服务 .开启远程桌面守护 .远程登录测试: .安全狗拦截...
-
安全清除你:C盘垃圾,让你多出近2G的空间!正文分析错误
$False$
-
安全检测Unix和Linux服务器安全设置入门精讲
其实每一个黑客都有自己独到的方法。笔者对于入侵网站服务器的资料收集了很多,但是因为实际情况的不同,往往造成许多方法的失效;由此可见,每一个网站的情况都不同,需要入侵者区分对待。假设深圳的线路比北京的线路要好的多,从而给了词典穷举很大的方便...
-
安全校验Session验证码并避免绕开验证码攻击
已经记不得是在哪个网站上看到的了,一般情况下对于验证码的校验,大家很容易写成下面这样: 复制代码 代码如下: % If Request.Form("SecurityCode") = Session("SecurityCode") Then...
-
安全虚拟主机配置技巧
注入漏洞、上传漏洞、弱口令漏洞等问题随处可见。跨站攻击,远程控制等等是再老套不过了的话题。有些虚拟主机管理员不知是为了方便还是不熟悉配置,干脆就将所有的网站都放在同一个目录中,然后将上级目录设置为站点根目录。有些呢,则将所有的站点的目录都...
-
安全基础知识IP的不安全性
被窃盗的信用卡号、遭受攻击的计算机系统以及其他一些著名的在线攻击已经引起了许多用户的警惕,使安全管理人员将注意力放在了高级入侵检测系统、防火墙和其他高水平防御上。...
-
安全警钟让路由器成为你防范的堡垒
在典型的校园网环境中,路由器一般处于防火墙的外部,负责与Internet的连接。这种拓扑结构实际上是将路由器暴露在校园网安全防线之外,如果路由器本身又未采取适当的...
-
安全的FTP服务器 vsftpd简介
vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux, BSD, Solaris, HP-UX 以及 IRIX 上面。它支持很多其他的 FTP 服务器不支持的特征。比如: 非常高的安全性需求 带宽限...
-
安全技术—RSA公钥密码体制安全性分析
引言 RSA密码系统是较早提出的一种公开钥密码系统。1978年,美国麻省理工学院(MIT)的Rivest,Shamir和Adleman在题为《获得数字签名和公开钥密码系统的方法》的论文中提出了基于数论的非对称(公开钥)密码体制,称为RSA...
-
安全狗下添加用户的另一方法(大量操作实现突破)
前几天发现的,略无语,因为简单到。。 直接在命令行下使用 for /l %i in (1,1,1000) do @net user test test /add@net localgroup administrators test /ad...