如何用Python编写加密程序?

使用 python 加密是最简单的任务,因为 python 有一个名为cryptography. 该包用于加密和解密消息。

在网络安全犯罪和黑客行为盛行的当今世界,我们在发送或接收数据时必须小心谨慎。最纯粹形式的数据很容易被窃取和滥用。因此,我们在处理机密或个人数据时必须使用加密。

本教程将向我们介绍密码学、加密、解密以及编写加密程序的可能方法。

什么是密码学?

密码学是在可信第三方或对手存在的情况下通过安全通道将消息从发送者传输到接收者。消息被转换成密码或只有发送者知道的另一种形式,并且接收者可以借助密钥来解密。这种转换可确保其他人无法获取正在传输的消息。密码学涉及使用数学算法和密钥将纯文本转换为密文,反之亦然。

密码学主要关注机密性、真实性和完整性。众所周知的密码学用例是用于军事和政府机构。

政府或军队高级官员之间的数据传输以密码的形式进行。

密码学的应用

下面给出了密码学在日常生活中的一些应用。

  • 密码保护
  • 安全网络通信
  • 数字签名
  • 电子货币

阅读本文以了解有关加密模块的更多信息

什么是加密?

加密是将纯文本转换为密文的过程,除了拥有解密消息密钥的接收者之外,任何人都无法读取密文。

什么是解密?

解密使用解密密钥或算法将密文转换回明文。这是加密的相反过程。

下面是发送方和接收方之间数据传输的流程图,其中发送方发送Hello! 作为消息,然后使用加密密钥将其转换为密文。接收方使用解密密钥对密文进行解密并获得原始消息。

密码学

如何编写加密程序?

用 python 编写加密程序有几种方法。我们将讨论以下方法。

  • 使用 ASCII 码加密
  • 使用字符串反转的加密
  • 对称密钥加密

使用 Ascii 代码加密

ASCII 是 美国信息交换标准码的缩写,是电子通信的字符编码标准。ASCII 代码代表计算机、电信设备和其他设备中的文本。

下面是 ASCII 图表供参考。

ASCII码

在这种方法中,我们将获取用户的输入,获取消息中每个字符的 ASCII 代码,并打印密文,并将密钥添加到每个字符的 ASCII 值中。

请参阅本文以了解如何打印字符的 ASCII 值。

让我们看看如何编写该程序。

1
2
3
4
5
6
7
8
#encryption using the ascii code
msg = input("Enter a message to encrypt: ")
encmsg = ""
for ch in msg:
    asc = ord(ch) + 3
    ench = chr(asc)
    encmsg += ench
print("Encrypted message:",encmsg)

在第一行中,我们使用该函数接受用户从键盘输入的内容input()

创建一个空字符串来存储加密的消息。该字符串名为 encmsg。

在下面的行中,我们创建一个 for 循环来迭代 msg 中的每个字符,以获得与该字符对应的 ASCII。

asc = ord(ch) + 3:该ord()方法用于获取与字符关联的整数值。我们正在添加一个密钥来加密消息。该行返回一个字符的整数值+3 个点。例如,如果字符的 Unicode 整数值为 65,则此行返回整数 68。此计算结果存储在名为 asc 的变量中。

ench = chr(asc):上面的行生成与字符关联的整数+3值。但我们需要该 Unicode 值的字符来加密消息。chr()方法返回与整数关联的字符。该字符存储在名为 ench 的变量中。

最后,消息中的每个字符都被上面两行转换为密文,并附加到我们之前创建的空字符串中。

在最后一行,我们打印存储在变量 encmsg 中的加密消息。

输出如下所示。

使用 Ascii 加密

根据 ASCII 图表,字符 H 的 Unicode 整数值为 72。当我们添加密钥值 3 时,它变为 75。与整数 75 关联的字符是 K。因此,加密消息以 K 为它的第一个字符。消息中的所有字符都遵循相同的方法。

同样,消息末尾的感叹号(!)的整数值为33。现在,当我们添加键值时,它变为36。图表中与36关联的字符是$。因此,输出中的最后一个字符是 $。

使用字符串反转加密

让我们把之前的方法变得复杂一点。

在此方法中,我们将遵循与前一种方法相同的步骤,但最后反转加密的消息。

让我们看看如何做到这一点。

1
2
3
4
5
6
7
8
9
#encryption using the ascii code
msg = input("Enter a message to encrypt: ")
encmsg = ""
for ch in msg:
    asc = ord(ch) + 3
    ench = chr(asc)
    encmsg += ench
encmsg= encmsg[::-1]
print("The encrypted message is:",encmsg)

观察第八行。我们获取了加密消息(encmsg)并在切片运算符的帮助下对其应用了反转。

请访问本文以了解有关 Python 中字符串反转的更多信息。

让我们看看输出。

使用字符串反转加密

如果比较两个输出,就会发现加密消息是相同的。但是,排列顺序是相反的。

上述方法没有为数据提供有希望的加密。让我们了解加密消息的其他安全方法。

对称密钥加密

在对称密钥加密中,仅使用一个密钥进行加密和解密。这种类型的加密中使用的密钥称为秘密密钥。

发送方和接收方使用的密钥可以是特定代码或由随机数生成器生成的随机字母或数字串。对称密钥加密可以提供保密性,但不能确保真实性。

在这种方法中,我们将查看模块Fernet中可用的算法cryptography并使用 fernet 对象生成密钥。

但首先,您需要安装加密包。

!pip install cryptography

安装完成后,您现在可以导入 Fernet 对象。

让我们看看代码。

1
2
3
4
5
6
7
8
9
from cryptography.fernet import Fernet
key=Fernet.generate_key()
fer=Fernet(key)
msg=fer.encrypt(b"I'm sure you will never understand this message!")
ciphmsg=fer.decrypt(msg)
orgmsg=ciphmsg.decode()
print("The original message is:\n",orgmsg)
print("The encypted message is:\n",msg)
print("The cipher text is:\n",ciphmsg)

from cryptography.fernet import Fernet:Fernet 是模块的一个类cryptography.fernet我们正在这条线上导入 Fernet 类。

key=Fernet.generate_key():我们正在生成一个将用于加密消息的加密密钥。该加密密钥存储在名为 key 的变量中

fer=Fernet(key):我们正在创建一个新变量 fer 来存储之前生成的密钥实例。

msg=fer.encrypt(b“我确信你永远不会理解这条消息!”):我们试图加密的消息是“我确信你永远不会理解这条消息!该消息存储在名为 msg 的变量中。encrypt() 方法用于对消息进行编码。然后,该消息被转换为字节,并由消息前面的“b”作为前缀表示

ciphmsg=fer.decrypt(msg):之前加密的消息现在使用decrypt() 方法进行解密。如上一行所示,消息被转换为字节。所以默认情况下,解密后的消息也将是字节的形式。该消息存储在名为 ciphmsg 的变量中。

orgmsg=ciphmsg.decode():解密消息的字节形式现在在decode()的帮助下转换为可读文本。orgmsg 是为存储转换后的消息而创建的变量。

在接下来的三行中,我们将打印我们给出的原始消息、加密形式,最后是密文。

使用对称密钥加密

结论

尽管加密技术很困难,但通过可能在数据泄露中有用的神秘代码向受信任的接收者发送消息始终被认为是安全的。发送或接收加密消息还可以确保机密性、完整性和安全性。密码学不再是皇家技术。为了保护我们的数据和信息,我们还可以在日常生活中实施密码学的方法和算法。

在这篇文章中,我们了解了密码学、加密和解密的定义以及借助加密和解密密钥进行数据传输的流程图。

谈到加密程序,我们已经学习了如何使用 Unicode 整数和使用 ASCII 协议的字符值来加密我们的消息。

我们还观察到将消息反转作为加密消息的方法。

但这些方法并不能保证完美的加密机制。

因此,我们已经了解了该模块的用法和安装以及如何使用包中提供的算法执行对称密钥加密。

我们尝试过使用Fernet算法进行对称密钥加密,该算法仅使用一个密钥进行加密和解密。

参考

要了解有关加密包的更多信息,请访问 PyPI 的官方网站。