package des;
/**
* 加密过程:
* 1.初始置换 IP:将明文顺序打乱重新排列,置换输出为 64 位。
* 2.将置换输出的 64 位明文分成左右凉拌,左一半为 L0,右一半称为 R0,各 32 位。
* 3。计算函数的 16 轮迭代。
* a〕第一轮加密迭代:左半边输入 L0,右半边输入 R0:由轮函数 f 实现子密钥 K1 对 R0
的加密,
* 结果为 32 位数据组 f(R0,K1),
* b)第二轮加密迭代:左半边输入 L1=R0,右半边输入 R1=L0⊕f(R0,K1),由轮函数 f 实现子
密钥
* K2 对 R1 的加密,结果为 32 位数据组 f(R1,K2),f(R1,K2)与 L1 模 2 相加,得到一个
32 为数据组 L1⊕f(R1,K2).
* c)第 3 到 16 轮迭代分别用密钥 K3,K4……K16 进行。 4.再经过逆初始置换 IP-1,将数
据打乱重排,生成 64 位密文。
*
* 子密钥生成过程:
* 1.将 64 位的密钥经过 PC-1 置换生成 56 位密钥。
* 2.将 56 位的密钥分成左右两局部,分别进行移位操作〔一共进行 16 轮〕,产生 16 个 56
位长度的子密钥。
* 3.将 16 个 56 位的子密钥分别进行 PC-2 置换生成 16 个 48 位的子密钥。
*
* 轮函数 f 的工作过程:
* 1.在第 i 次加密迭代过程中,扩展置换 E 对 32 位的 Ri-1 的各位通过置换表置换为 48 位
的输出。
* 2.将该 48 位的输出与子密钥 Ki 进行异或操作,运算结果经过 S 盒代换运算,得到一个 32
位比特的输出。
* 3。该 32 位比特输出再经过 P 置换表进行 P 运算,将其各位打乱重排,生成 32 位的输
出。
*
* @author Ouyang
*
*/
public class Des {
int[] byteKey;
public Des(int[] byteKey) {
this.byteKey = byteKey;
}
private static final int[] IP = { 58, 50, 42, 34, 26, 18, 10, 2, 60, 52,
44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48,