密码学基础

密码学基础

密码学是研究编制密码和破译密码的技术科学。研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学;应用于破译密码以获取通信情报的,称为破译学,总称密码学。

一.密码学发展阶段

1.古典密码学( 1949年之前)主要特点:数据的安全基于算法的保密
2.近代密码学(1949~1975年)主要特点:数据的安全基于密钥而不是算法的保密,密码学从此开始成为一门科学
3.现代密码学(1976年以后)密码学新方向一公钥密码学,主要特点:解决了密钥分发和管理的问题,密码学真正广泛在商业中应用

二.暴力破解密码难度

破解密码分为两种

1.拿字母数字标点去试,暴力破解,把常用的密码收集起来,保存到文档里就是密码字典,用户名字典

2.根据加密的规律尝试反推出原文,技术要求特别高

image-20240424140040357

三.摩斯密码

image-20240424141856422

四.密码本

A—>9 B---->5 C---->1

依靠密码对照表

不同的中文编码,字节长度是不一样的,UTF-8的编码中文占3个字节,GBK编码中文占2个字节

image-20240424143034760

UTF-8对照表https://blog.csdn.net/u012153439/article/details/51896846

# UTF-8/BGK转码
s = '你'

print(len(s.encode('UTF-8')))
print(len(s.encode('GBK')))

s1 = '一'
print(s1.encode('UTF-8'))
print(s1.encode('GBK'))


# 把ascii字符转成十进制
s = 'a'
print(ord(s))
# 把十进制转二进制
print(bin(ord(s)))

# 把十进制转成ASCII表字符
num = 120
print(chr(num))



binary = 0b1010 # 二进制
octal = 0o123 # 八进制
decimal = 123 # 十进制
hexadecimal = 0x2f # 十六进制

五.凯撒密码

凯撒大帝发明,核心思想:让原文通过轮盘位移多少次,到密文

称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文

image-20240424151440375

# 使用一个字符进行可行性研究

s = 'C'
num = ord(s)
num += 9
des = chr(num)
print(des)



# 利用循环结合上面的思路,对字符串进行凯撒加密
def encrypt_str(source, count):
    destination = ''
    for s in source:
        num = ord(s)
        num += count
        des = chr(num)
        destination += des
    return destination


if __name__ == '__main__':
    print(encrypt_str('helloworld', 6))
    
# 解密略

六.栅栏密码

所谓栅栏密码,就是把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。

明文:THE LONGEST DAY MUST HAVE AN END
加密  TELNETDYMS AEA N    # 13579
过程  H OGS A UTHV NED    # 246810
密文: TELNETDYMS AEA NH OGS A UTHV NED


# 栅栏密码
# 加密过程
def encrypt_str1(source):
    s1 = ''
    s2 = ''
    for i in range(0, len(source)):
        if i % 2 == 0:
            s1 += source[i]
        else:
            s2 += source[i]
    return s1 + s2


if __name__ == '__main__':
    # print(encrypt_str('helloworld', 6))
    print(encrypt_str1('THE LONGEST DAY MUST HAVE AN END'))

解密略




明文:THE LONGEST DAY MUST HAVE AN END
加密 THE LONGEST DAY   # 前半部分
过程 MUST HAVE AN END  # 后半部分
密文:TMHUES TL OHNAGVEES TA ND AE YN D  # 上一个下一个


THE LONGEST DAY MUST HAVE AN END!   # 17 16
THE LONGEST DAY M
UST HAVE AN END!
TUHSET  LHOANVGEE SATN  DEANYD !M

def decrypt_str2(source):
    s = ''
    if len(source) % 2 == 0:
        s1 = source[:len(source) // 2]
        s2 = source[len(source) // 2:]
        for i in range(len(s1)):
            s = s + (s1[i] + s2[i])
    else:
        s1 = source[:len(source) // 2 + 1]
        s2 = source[len(source) // 2 + 1:]
        for i in range(len(s2)):
            s = s + (s1[i] + s2[i])
        s += s1[-1]
    return s


if __name__ == '__main__':
    # print(encrypt_str('helloworld', 6))
    # print(encrypt_str1('THE LONGEST DAY MUST HAVE AN END'))
    print(decrypt_str2(source='THE LONGEST DAY MUST HAVE AN END!'))

七.维吉尼亚密码

引入了密钥的概念,利用原文+密钥进行加密

image-20240424164725719

加密

image-20240424165229561

解密

image-20240424165415577

其他古典密码学参考:https://blog.csdn.net/weixin_54977781/article/details/130530410

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值