CRYPTO现代密码学学习

这篇具有很好参考价值的文章主要介绍了CRYPTO现代密码学学习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

RC4 加密算法

简单介绍:RC4加密算法是一种对称加密算法,加密和解密使用同一个函数
初始化分为以下几个步骤

  • 初始化存储0-255字节的Sbox(其实就是一个数组)
  • 填充key到256个字节数组中称为Tbox(你输入的key不满256个字节则初始化到256个字节)
  • 交换s[i]与s[j] i 从0开始一直到255下标结束. j是 s[i]与T[i]组合得出的下标
     // 步骤一、初始化赋值
    for (i=0;i<256;i++){
        S[i] = i;
        T[I] = K[i mod keylen];
       }
    // 步骤二、用T产生S的初始置换
    j = 0;
       for (i=0; i<256; i++)
       {
           j = (j + S[i] + T[i]) mod 256;
           swap(S[i],S[j]);
       }
      // 步骤三、得到密钥流K(每次计算出一个K)
    i=j=0;
       for(h=0; h<datalen; h++)
       {
           i=(i+1) mod 256;
           j=(j+S[i]) mod 256;
           swap(S[i],s[j]);
           t=(S[i]+S[j]) mod 256;
           K=S[t];
          // D[h]^=K;      亦或得到密文
       }
       ```
    
    

RC4加密解析传送阵

RSA加密解密

CRYPTO现代密码学学习,密码学,学习,网络

求解私钥的步骤:
欧拉函数:表示表示与n互质的数的个数

CRYPTO现代密码学学习,密码学,学习,网络
eg:

[WUSTCTF2020]babyrsa

c = 28767758880940662779934612526152562406674613203406706867456395986985664083182
n = 73069886771625642807435783661014062604264768481735145873508846925735521695159
e = 65537

若要求解私钥,必须要分解n,得到两个质数p,q:http://www.factordb.com/index.php

p = 189239861511125143212536989589123569301
q = 386123125371923651191219869811293586459

求解私钥d,以及明文m

from Crypto.Util.number import long_to_bytes
from Crypto.Util.number import *


q = 189239861511125143212536989589123569301
p = 386123125371923651191219869811293586459

e = 65537
c = 28767758880940662779934612526152562406674613203406706867456395986985664083182
# n = 73069886771625642807435783661014062604264768481735145873508846925735521695159
n = q * p
# print(n)
d = gmpy2.invert(e, (p - 1) * (q - 1))
print("d=", d)
m = pow(c, d, n)

此处有疑问了,明文是如何转为这么一大长串数字呢?

import Crypto
from Crypto.Util.number import bytes_to_long
import os
t = os.urandom(4)	# os.urandom(len)方式产生长度为len的随机字节串
print(t)
for i in t:
    print(i)
print(bytes_to_long(t))	# 调用函数计算long整型值:

计算原理:29*pow(2,24) + 30*pow(2,16) + 150*pow(2,8) + 148*pow(2,0)
CRYPTO现代密码学学习,密码学,学习,网络

大数在此处的类是mpz,引用了GMP库:参考传送阵

判断字符串中所有字符是否都是可打印字符。

Unicode字符集中“Other” “Separator”类别的字符为不可打印的字符(但不包括ASCII码中的空格(0x20))。可用于判断转义字符。
ASCII码中第0~32号及第127号是控制字符;第33~126号是可打印字符,其中第48~57号为0~9十个阿拉伯数字;65~90号为26个大写英文字母,97~
122号为26个小写英文字母。
ascii码在0~255字符中只有189个字符能被打印。

lst = []
for idx,val in enumerate(range(256)):
    if chr(val).isprintable():
        lst.append(idx)
print(len(lst))
print(set(range(256)) - set(lst))

CRYPTO现代密码学学习,密码学,学习,网络

DES加密解密详解

Data Encryption Standard
就不主动写了,这篇文章讲的非常详细:
https://www.hankcs.com/security/des-algorithm-illustrated.html

密钥的生成

  • 子密钥K1~K16的生成:
    密钥转为2进制的初始密钥,初始密钥进行PC-1置换,得到56位的密钥;
    将这56bit密钥均分为两个28bit,左半部分 (C0) ,右半部分 (D0)
    将得到的 C0,D0 按照给定的移位表依次进行移位

CRYPTO现代密码学学习,密码学,学习,网络

  • 子密钥的CiDi 轮,是由 Ci-1Di-1 循环移位运算得到的
    off = [1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1]
    
        即C1C0向左循环移位1D1D0向左循环移位1C2C1向左循环移位1D2D1向左循环移位1C3C2向左循环移位2D3D2向左循环移位2;最后将其 Ci 与 Di 合并CiDi
  • 将合并后的每个 CiDi 经过PC-2置换,得到K1~K16

密文的生成

  • 和密钥的生成一样,先进行一个初始置换(换了个名字,叫IP置换)只不过密钥是将校验位去掉了,而明文的加密不需要验证。

  • 初始置换后将其均分为左边32位 L0,右边32位 R0

  • 密文的加密规则如下图
    CRYPTO现代密码学学习,密码学,学习,网络

  • 需要经过f函数的加密16轮,得到的 L16 R16, 接着再次进行一个IP逆置换,形成最终的密文。

  • 重要的就是这16轮的加密。
    加密函数
        Ln = Rn-1
        Rn= Ln-1 ㊉ f (Rn-1,Kn)
    f函数步骤如下(eg)

    • L1 = R0,R1 =L0 ㊉ f(R0,K1)
    • R032位,K1为48位,所以要进行32-48位的E盒扩展

      扩展规则:以4为单位,分为8组,每组首位前添加前相邻位,末位后添加相邻位,如下图所示:CRYPTO现代密码学学习,密码学,学习,网络
    • 扩展为48位后,与对应的子密钥进行亦或,即 R0 ㊉ K1,得到另一组最终48位的数据。
    • 分开后的密文序列是32位的,所以还要对其进行S盒压缩,最终将8组6bit的数据被转换为8组4bit(一共32位)的数据。

      48位数据化为8组6bitB1B2B3B4B5B6B7B8 ,每组含有6bit,经过以下运算
          S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8)
      最终得到的8组6bit的数据
      CRYPTO现代密码学学习,密码学,学习,网络
      S盒计算eg:
      101010到S1中。S1会将这六位的第一位1和第六位0拿出来,组成10作为S1的行,中间四位0101拿出来作为S1的列。我们转换成十进制,此时映射到这个S盒的位置就是(2,5),对应S盒的第3行6列(索引都从0开始数)。
      CRYPTO现代密码学学习,密码学,学习,网络
    • 将得到的32位数据在经过P盒置换,得到数据即为f函数结束
  • 将最终经过f函数的数据与 L0 亦或,得到 R1,即 L0 ㊉ 上一步结果

  • 重复上面步骤至16轮,在第16轮后,将R16L16 拼接为 R16L16

  • R16L16 经过IP-1盒逆置换,得到最终16进制数,即为密文。

注意:
DES加密算法中,文章来源地址https://www.toymoban.com/news/detail-776591.html

  • 密钥:
    置换PC-1盒64位去掉校验位为56位,简单表替换;
    置换PC-2盒,取56位密钥中的48位,简单表替换
  • 密文:
    置换IP盒,将原明文数据打乱,简单表替换,数据位数不变;
    扩展E盒,将分开的32位扩展为48位
    压缩S盒,将已经经过f函数变换后的48位数据(8组6bit)变回原来的32位(8组4bit),用于下次f函数的计算 ;
    置换P盒,将S盒的到的数据进行置换,简单表替换,数据位数依旧为32位。经P盒置换后的数据和 L0 做 ㊉ ,得到下一步的 Ri+1 .
    逆置换IP-1盒,合并后 R16L16 简单表替换,数据位数不变64bit

到了这里,关于CRYPTO现代密码学学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 区块链密码学学习笔记

    哈希函数是将任意长度的二进制明文通过算法处理映射为较短且固定长度的 二进制值,映射后的值也被称为哈希值。哈希值的数据唯一,且形式紧凑。即使只是变更明文中的一个字母,最终得到的哈希值也会发生变更。由于哈希算法本身的特点,任何人都不可能找到拥有相同

    2023年04月25日
    浏览(48)
  • CTF CRYPTO 密码学-4

    描述:oss先生将三个培根的中间一只移到了左边,然后咬了一小口最后一根,说真好吃,真是个奇怪的先生! 密文:VlM5WnlXc0ZibEhmMmE1ZHYxMDlhVkdmMlk5WmtRPT0= 分析 应该是根据题目提示解出压缩包的密码,查看flag。 第一次: 第二次: 分析 发现第二次解密失败,查看题目描述。三只培

    2024年01月19日
    浏览(53)
  • CTF CRYPTO 密码学-3

    题目给出一个pyc后缀的文件,需要使用uncompyle6模块去还原成py文件 uncompyle6 是一个 Python 反编译器,它能够将 Python 字节码(.pyc 文件)转换回源代码(.py 文件)。 注意 版本问题 uncompyle6默认只支持3.8及以下版本 如何修改?(我这里是python3.11.3) Python311Libsite-packagesuncompy

    2024年01月17日
    浏览(40)
  • CTF CRYPTO 密码学-5

    f5-lf5aa9gc9{-8648cbfb4f979c-c2a851d6e5-c} 分析 观察给出的密文发现有f、l、a、g等字符有规律的夹杂的密文中间,看出都是每3个字符的第1个 每组3个字符,共分成14组

    2024年01月23日
    浏览(46)
  • CTF CRYPTO 密码学-1

    工具简介 在Kali Linux系统中,openssl 是一个强大的命令行工具,用于处理SSL/TLS协议。openssl pkeyutl 是 openssl 工具集中的一个命令,用于处理私钥文件。 参数解释 openssl pkeyutl:这是执行私钥操作的命令。 -decrypt:这个选项告诉 openssl 执行解密操作。 -inkey d.dec:指定用于解密的私

    2024年01月18日
    浏览(51)
  • CTF CRYPTO 密码学-2

    字符 ZZZZ X XXZ ZZ ZXZ Z ZXZ ZX ZZX XXX XZXX XXZ ZX ZXZZ ZZXZ XX ZX ZZ 分析 此字段是由Z和X组成的字符,联想到莫斯密码是由.和-组成的所以接下来可以尝试莫斯密码解题 注:也可以使用在线平台解密,这里用工具进行演示 链接:https://pan.baidu.com/s/1Cgs6QtWnQtrp8aTWrq4bEQ 提取码:aq5a

    2024年01月19日
    浏览(55)
  • 密码学学习笔记(二十四):TCP/IP协议栈

    TCP/IP协议栈的基础结构包括应用层、传输层、网络层、数据链路层和物理层。 应用层位于TCP/IP协议栈的最顶层,是用户与网络通信的接口。这一层包括了各种高级应用协议,如HTTP(用于网页浏览)、FTP(用于文件传输)、SMTP(用于电子邮件)和DNS(用于域名解析)。应用层

    2024年01月19日
    浏览(56)
  • 密码学学习笔记(十二):压缩函数 - Davies–Meyer结构

    密码学中压缩函数是指将输入的任意长度消息压缩为固定长度输出的函数。压缩函数以两个特定长度的数据为输入,产生与其中一个输入大小相同的输出。简单来说就是它接受一些较长的数据,输出更短的数据。 压缩函数接收长度为X和Y的两个不同输入,并生成长度为X或Y的

    2024年02月16日
    浏览(42)
  • 现代密码学基础(2)

    目录 一. 介绍 二. 举例:移位密码 (1)密文概率 (2)明文概率 三. 举例:多字母的移位密码 四. 完美安全 五. 举例:双子母的移位密码 六. 从密文角度看完美安全 七. 完美保密性质 在密码学中,K代表密钥,M代表明文,C代表密文,每个都有各自的概率分布。 密钥是通过密

    2024年01月17日
    浏览(60)
  • 现代密码学复习

    目录 密码学总结 第一章——只因础模型与概念 1.1 密码学五元组(结合🐏皮卷) 1.2 Dolev-Yao威胁模型 1.3 攻击类型 1.4 柯克霍夫原则(Kerckhoffs\\\'s principle) 1.5 对称、非对称加密 1.6 密码的目标 1.7 保密通信模型 第二章——古典密码 2.1 仿射密码 2.2 Hill密码 例题0 ——解同余方程

    2023年04月09日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包