/HFUTCryptoHomework

合肥工业大学信息安全技术作业,本项目主要实现了RSA和DES两种加密算法

Primary LanguageJavaMIT LicenseMIT

HFUTCryptoHomework

合肥工业大学信息安全技术作业,本项目主要实现了RSA和DES两种加密算法

算法原理

RSA

RSA加密算法是一种非对称加密算法,于1978年由Ron Rivest、Adi Shamir和Leonard Adleman提出,算法名称就是根据他们的名字首字母得来。非对称加密意味着加密和解密过程使用不同的密钥。在RSA算法中,有一对密钥:公钥和私钥。公钥用于加密数据,私钥用于解密数据。通常,公钥是公开的,任何人都可以用它加密数据;私钥是保密的,仅拥有者可以用它解密数据。

RSA加密算法的原理基于数论和大数计算。以下是算法的主要步骤:

  1. 选择两个大质数 ${p}$${q}$
  2. 计算 ${n = p\times q}$${n}$ 用于构建公钥和私钥,是模数。
  3. 计算欧拉函数 ${\varphi(n) = (p-1)(q-1)}$
  4. 选择一个整数 ${e}$ ,使得 ${1 < e < \varphi(n)}$ ,且 ${e}$${\varphi(n)}$ 互质 $(gcd(e, \varphi(n)) = 1)$${e}$ 是公钥的一部分。
  5. 计算整数 ${d}$ ,使得 ${d ≡ e^{-1}(mod \varphi(n))}$ 。换句话说,找到一个数 ${d}$ ,满足 ${ed \equiv 1 (mod \varphi(n))}$${d}$ 是私钥的一部分。
  6. 公钥为 $(n, e)$ ,私钥为 $(n, d)$

加密和解密的过程如下:

  1. 加密:假设明文消息为 ${M(0 < M < n)}$,密文C可以通过以下公式计算: ${C ≡ M^e (mod n)}$
  2. 解密:已知密文 ${C}$,明文消息 ${M}$可以通过以下公式计算: ${M ≡ C^d (mod n)}$

RSA算法的安全性依赖于大数因子分解的困难性,即随着密钥长度( ${n}$ 的位数)的增加,攻击难度呈指数级增长。给定 ${n}$ 的值,分解出 ${p}$${q}$ 是非常困难的,特别是当 ${p}$${q}$ 都是大质数时。目前,尚无已知的高效算法能够在合理时间内分解大数 ${n}$

DES

数据加密标准(Data Encryption Standard,简称DES)是一种对称加密算法,于1977年由美国国家标准与技术研究院(NIST)正式发布。DES算法使用相同的密钥进行加密和解密操作。该算法基于分组密码设计原则,将明文分为固定大小(64位)的块,然后对每个块进行加密。DES使用一个56位的密钥,但其密钥长度实际上为64位(其中8位用于奇偶校验)。

DES加密算法的主要步骤如下:

  1. 初始置换:将64位明文输入块进行置换(重新排列)操作。初始置换表定义了明文位的重新排列规则。
  2. 密钥处理:对于给定的56位密钥,使用密钥调度算法(key schedule)生成16个48位的子密钥,这些子密钥将在接下来的加密过程中使用。
  3. 16轮迭代:DES算法进行16轮迭代操作,每轮迭代包括以下步骤:
    • 扩展置换:将32位的右半部分进行扩展置换,得到一个48位的数据块。
    • 子密钥异或:将扩展后的数据块与对应轮的子密钥进行异或操作。
    • S-盒替换:将异或后的48位数据块划分为8个6位的分组,然后使用8个S-盒(替换盒)将每个6位分组映射为4位的输出。S-盒的设计是DES安全性的关键。
    • P-盒置换:将S-盒的输出进行P-盒置换,重新排列比特,得到一个32位的数据块。
    • 左右交换与混合:最后,将P-盒置换后的32位数据与输入的左半部分进行异或,得到下一轮迭代的右半部分。同时,本轮的右半部分变为下一轮的左半部分。
  4. 最终交换:在16轮迭代完成后,将最后一轮的左右半部分合并,并进行最终置换,即初始置换的逆置换,得到64位的密文输出。

解密过程与加密过程类似,只需使用相同的密钥进行逆操作即可。注意,解密时使用的子密钥顺序与加密时相反。