合肥工业大学信息安全技术作业,本项目主要实现了RSA和DES两种加密算法
RSA加密算法是一种非对称加密算法,于1978年由Ron Rivest、Adi Shamir和Leonard Adleman提出,算法名称就是根据他们的名字首字母得来。非对称加密意味着加密和解密过程使用不同的密钥。在RSA算法中,有一对密钥:公钥和私钥。公钥用于加密数据,私钥用于解密数据。通常,公钥是公开的,任何人都可以用它加密数据;私钥是保密的,仅拥有者可以用它解密数据。
RSA加密算法的原理基于数论和大数计算。以下是算法的主要步骤:
- 选择两个大质数
${p}$ 和${q}$ 。 - 计算
${n = p\times q}$ 。${n}$ 用于构建公钥和私钥,是模数。 - 计算欧拉函数
${\varphi(n) = (p-1)(q-1)}$ 。 - 选择一个整数
${e}$ ,使得${1 < e < \varphi(n)}$ ,且${e}$ 与${\varphi(n)}$ 互质$(gcd(e, \varphi(n)) = 1)$ 。${e}$ 是公钥的一部分。 - 计算整数
${d}$ ,使得${d ≡ e^{-1}(mod \varphi(n))}$ 。换句话说,找到一个数${d}$ ,满足${ed \equiv 1 (mod \varphi(n))}$ 。${d}$ 是私钥的一部分。 - 公钥为
$(n, e)$ ,私钥为$(n, d)$ 。
加密和解密的过程如下:
- 加密:假设明文消息为
${M(0 < M < n)}$ ,密文C可以通过以下公式计算:${C ≡ M^e (mod n)}$ 。 - 解密:已知密文
${C}$ ,明文消息${M}$ 可以通过以下公式计算:${M ≡ C^d (mod n)}$ 。
RSA算法的安全性依赖于大数因子分解的困难性,即随着密钥长度(
数据加密标准(Data Encryption Standard,简称DES)是一种对称加密算法,于1977年由美国国家标准与技术研究院(NIST)正式发布。DES算法使用相同的密钥进行加密和解密操作。该算法基于分组密码设计原则,将明文分为固定大小(64位)的块,然后对每个块进行加密。DES使用一个56位的密钥,但其密钥长度实际上为64位(其中8位用于奇偶校验)。
DES加密算法的主要步骤如下:
- 初始置换:将64位明文输入块进行置换(重新排列)操作。初始置换表定义了明文位的重新排列规则。
- 密钥处理:对于给定的56位密钥,使用密钥调度算法(key schedule)生成16个48位的子密钥,这些子密钥将在接下来的加密过程中使用。
- 16轮迭代:DES算法进行16轮迭代操作,每轮迭代包括以下步骤:
- 扩展置换:将32位的右半部分进行扩展置换,得到一个48位的数据块。
- 子密钥异或:将扩展后的数据块与对应轮的子密钥进行异或操作。
- S-盒替换:将异或后的48位数据块划分为8个6位的分组,然后使用8个S-盒(替换盒)将每个6位分组映射为4位的输出。S-盒的设计是DES安全性的关键。
- P-盒置换:将S-盒的输出进行P-盒置换,重新排列比特,得到一个32位的数据块。
- 左右交换与混合:最后,将P-盒置换后的32位数据与输入的左半部分进行异或,得到下一轮迭代的右半部分。同时,本轮的右半部分变为下一轮的左半部分。
- 最终交换:在16轮迭代完成后,将最后一轮的左右半部分合并,并进行最终置换,即初始置换的逆置换,得到64位的密文输出。
解密过程与加密过程类似,只需使用相同的密钥进行逆操作即可。注意,解密时使用的子密钥顺序与加密时相反。