Crypto(密码学)学习笔记(一)

相关算法

Base64

Base64的由来背景

Base64是一种编码方式,最早出现在电子邮件传输协议中。用于在不改变传输协议的基础上,做一种扩展方案来传递非ASCLL字符,把非ASCLL字符用ASCLL字符来表示。

Base64的定义

Base64 是一种基于64个 ASCII 字符来表示二进制数据的表示方法。
Base64 将8比特位为一个单元的字节数据拆分为以6个比特位为一个单元的二进制片段,每6个比特位单元对应Base64索引表中的一个字符,这样最终构成一个超过编码前字节数据33%的字符串。
Base64 中64个可打印字符包括字母A-Z、a-z、数字0-9,此外还有两个字符为+和/,这样构成了共有64字符的Base64索引表:
Base64字符索引表

python代码实现

import base64
#编码
source = '进行编码的内容'`
#也可以用input
print(base64.b64encode(source.encode()))
#解码
source1 = '进行解码的内容'
print(base64.b64decode(source))
```python
在这里插入代码片

Morse

加密原理

对于一些简单的字符,有一张摩斯密码索引表(或者说对应表):
摩斯密码对应表

对于对于其他字符,首先将其转为unicode数值,再转为二进制,最后用".“替换"0”, 用"-“替换"1”, 就得到了该字符的摩斯码

Caesar

凯撒密码(Caesar Cipher)是一种古老的替换密码,它以古罗马军事领袖恺撒·尤利乌斯·恺撒(Julius Caesar)的名字命名。这种密码基于一个简单的原理,即将明文中的每个字母按照一个固定的位移值进行替换,从而生成密文。
凯撒密码的原理如下:

选择位移值(偏移值)

选择一个整数值,通常称为位移值或偏移值,来表示明文中字母的替代位置。这个值可以是任何整数,通常在1到25之间,但实际上可以是任何值。

字母替代

将明文中的每个字母替换为距离它固定位移值的字母。如果位移值是正的,字母向后移动;如果是负的,字母向前移动。字母的替代是循环的,例如,如果字母位于字母表的末尾,那么它将回到字母表的开头。

生成密文

将明文中的所有字母按照上述规则替代后,得到的结果即为密文。

示例:

假设我们选择位移值为3,然后对明文 “HELLO” 进行凯撒加密:

4.“H” 移动3位后变成 “K”
5.“E” 移动3位后变成 “H”
6.“L” 移动3位后变成 “O”
7.“L” 移动3位后变成 “O”
8.“O” 移动3位后变成 “R”

因此,“HELLO” 加密后的密文为 “KHOOB”。
凯撒密码是一种非常简单的替代密码,容易理解和使用。然而,由于它的简单性,它也非常容易被破解。通常,通过暴力尝试所有可能的位移值,可以轻松解密凯撒密码。因此,在实际应用中,凯撒密码主要用于教育目的或作为其他更复杂密码算法的组成部分。

凯撒密码python实现

def caesar_cipher(text, shift):
    result = ""

    for char in text:
        if char.isalpha():  # 检查字符是否是字母
            is_upper = char.isupper()  # 检查字符是否是大写字母
            char = char.lower()  # 将字符转换为小写以便进行位移
            shifted = (ord(char) - ord('a') + shift) % 26  # 执行位移操作
            char = chr(shifted + ord('a'))  # 将结果转换回字符

            if is_upper:
                char = char.upper()  # 如果原字符是大写字母,将结果也转换为大写字母

        result += char

    return result

# 示例用法
text = "HELLO"
shift = 3
encrypted_text = caesar_cipher(text, shift)
print("加密后:", encrypted_text)

decrypted_text = caesar_cipher(encrypted_text, -shift)  # 解密需要使用相反的位移值
print("解密后:", decrypted_text)



注意:这个示例加密了 “HELLO”,然后再解密,确保解密后的文本与原始文本相同。你可以调整位移值和文本来加密不同的内容。请注意,这只是凯撒密码的一个简单实现,不适合用于真正的安全通信,因为凯撒密码很容易被破解。

RSA算法

RSA算法是什么

RSA加密算法是一种非对称加密算法,该算法加密和解密使用不同的密钥,即使用加密密钥进行加密、解密密钥进行解密,即所谓的非对称性。在RAS算法中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,由于无法计算出大数n的欧拉函数phi(N),所以不能根据PK计算出SK。
就目前的技术水平,RSA密钥长度达到1024就已经非常安全了。

RSA算法流程

RSA算法流程

RSA算法python实现

使用PyCryptodome库进行RSA加密和解密

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

# 生成RSA密钥对
key = RSA.generate(2048)  # 2048位密钥长度
private_key = key.export_key()
public_key = key.publickey().export_key()

# 保存密钥对到文件
with open("private.pem", "wb") as private_file:
    private_file.write(private_key)
with open("public.pem", "wb") as public_file:
    public_file.write(public_key)

# 读取公钥和私钥
private_key = RSA.import_key(open("private.pem").read())
public_key = RSA.import_key(open("public.pem").read())

# 加密
cipher = PKCS1_OAEP.new(public_key)
message = "Hello, RSA!".encode('utf-8')
encrypted_message = cipher.encrypt(message)

# 解密
cipher = PKCS1_OAEP.new(private_key)
decrypted_message = cipher.decrypt(encrypted_message)

# 打印结果
print("原始消息:", message.decode('utf-8'))
print("加密后:", encrypted_message)
print("解密后:", decrypted_message.decode('utf-8'))

Rot13(替代式加密算法)

ROT13(“rotate by 13 places”,即“向后旋转13个位置”)是凯撒密码的一个特殊形式,它将每个字母向后旋转13个位置。因为英文字母表有26个字母,所以对一个字母应用ROT13加密两次将得到原始字母,这使得ROT13成为一个简单的加密和解密手段。

Rot13算法的原理

1.对于每个英文字母,将其替换为在字母表中向后移动13个位置的字母。
2.小写字母仍替换为小写字母,大写字母仍替换为大写字母。
3.非字母字符保持不变

Rot13算法python实现

在 Python 中,可以使用 codecs 模块来执行ROT13转换:

import codecs

text = "HELLO"
encoded = codecs.encode(text, 'rot_13')
print(encoded)  # 输出:URYYBpython

词频分析

词频分析(Word Frequency Analysis)是文本分析中的一项基本任务,它用于计算文本中每个词语的出现频率。这种分析有助于理解文本的主题、内容,或者用于文本挖掘、信息检索和自然语言处理任务。以下是进行词频分析的一般步骤:

1.文本预处理:

文本清洗:去除文本中的特殊字符、标点符号、HTML标签等。
分词:将文本拆分成单词或词语的列表。
去停用词:去除常见的停用词,如 “the”、“and”、“is” 等,这些词在分析中通常没有太大的信息价值。
转换为小写:将所有词语转换为小写,以确保不同大小写形式的单词被视为相同的单词。

2.计算词频:

对文本进行分词后,遍历文本并统计每个词语的出现次数。这可以使用字典(Python 中的字典数据结构)或其他数据结构来完成。
3.排序:
通常,词频分析结果会根据词语的出现次数进行排序,以便找到最常出现的词语。

可视化:

词频分析的结果可以通过图表(如柱状图、词云等)进行可视化展示,以帮助理解文本中的主要关键词。

分析:

分析词频结果,识别文本中的主题、关键词、或者其他感兴趣的信息。这可以帮助决策制定、信息检索、情感分析等任务。

词频分析python实现

在 Python 中,你可以使用各种自然语言处理工具和库来执行词频分析,如 NLTK(Natural Language Toolkit)和 spaCy。以下是一个简单的 Python 示例,用于计算文本中的词频:

在这里插入代码片
```import collections
import re

#示例文本
text = "This is a sample text. This text is used for word frequency analysis."

#文本预处理
text = text.lower()
words = re.findall(r'\w+', text)

 计算词频
word_freq = collections.Counter(words)

 按词频降序排序
sorted_word_freq = sorted(word_freq.items(), key=lambda x: x[1], reverse=True)

#打印词频结果
for word, freq in sorted_word_freq:
    print(f"{word}: {freq}")
```python
在这里插入代码片

这个示例首先对文本进行了基本的清洗和分词,然后使用 Counter 类计算词频,并最后按词频降序排序并打印结果。

参考

  1. https://huaweicloud.csdn.net/63a57206b878a5454594795b.html
  2. https://blog.csdn.net/xiaxl/article/details/119379461
  3. https://blog.csdn.net/chengyikang20/article/details/123613134
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值