这里写目录标题
相关算法
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索引表:
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算法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 类计算词频,并最后按词频降序排序并打印结果。
参考
- https://huaweicloud.csdn.net/63a57206b878a5454594795b.html
- https://blog.csdn.net/xiaxl/article/details/119379461
- https://blog.csdn.net/chengyikang20/article/details/123613134
等