DES算法Java实现源代码

合集下载

java des加密方法

java des加密方法

java des加密方法

Java中的DES加密方法是一种对称加密算法,它使用一个共享的密钥来加密和解密数据。DES算法的密钥长度为56位,但由于其已被认为容易被破解,因此现在已经不再被广泛使用。

在Java中,我们可以使用Java Cryptography Extension (JCE)中的javax.crypto包中的类来执行DES加密和解密操作。我们可以使用javax.crypto.KeyGenerator类来生成一个DES密钥,然后使用javax.crypto.Cipher类来执行加密和解密操作。

使用DES加密和解密数据的基本流程如下:

1. 创建一个javax.crypto.KeyGenerator对象,并使用DES算法初始化它。

2. 调用KeyGenerator的generateKey()方法生成一个密钥。

3. 创建一个javax.crypto.Cipher对象,并使用密钥初始化它。

4. 调用Cipher的doFinal()方法,将需要加密或解密的数据作为参数传递给它。

5. 将加密或解密后的数据作为结果返回。

在进行DES加密和解密操作时,我们需要注意以下几点:

1. 密钥长度必须为8个字节,即56位。

2. 加密和解密的数据必须是8个字节的倍数,如果不足8个字节,则需要使用填充方法填充。

3. 加密和解密使用的密钥必须相同,否则解密将失败。

在实际应用中,我们可以使用DES加密算法来保护敏感数据的安

全性,例如密码、信用卡号码等。同时,我们也需要采取其他措施来保护数据传输的安全,例如使用SSL/TLS协议。

DES算法源代码-JAVA

DES算法源代码-JAVA

DES算法提供CBC, OFB, CFB, ECB四种模式,MAC是基于ECB实现的。

一、数据补位

DES数据加解密就是将数据按照8个字节一段进行DES加密或解密得到一段8个字节的密文或者明文,最后一段不足8个字节,按照需求补足8个字节(通常补00或者FF,根据实际要求不同)进行计算,之后按照顺序将计算所得的数据连在一起即可。

这里有个问题就是为什么要进行数据补位?主要原因是DES算法加解密时要求数据必须为8个字节。

二、ECB模式

DES ECB(电子密本方式)其实非常简单,就是将数据按照8个字节一段进行DES加密或解密得到一段8个字节的密文或者明文,最后一段不足8个字节,按照需求补足8个字节进行计算,之后按照顺序将计算所得的数据连在一起即可,各段数据之间互不影响。

三、CBC模式

DES CBC(密文分组链接方式)有点麻烦,它的实现机制使加密的各段数据之间有了联系。其实现的机理如下:

加密步骤如下:

1)首先将数据按照8个字节一组进行分组得到D1D2......Dn(若数据不是8的整数倍,用指定的PADDING数据补位)

2)第一组数据D1与初始化向量I异或后的结果进行DES加密得到第一组密文C1(初始化向量I为全零)

3)第二组数据D2与第一组的加密结果C1异或以后的结果进行DES加密,得到第二组密文C2

4)之后的数据以此类推,得到Cn

5)按顺序连为即为加密结果。

解密是加密的逆过程,步骤如下:

)首先将数据按照8个字节一组进行分组得到

2)将第一组数据进行解密后与初始化向量I进行异或得到第一组明文D1(注意:一定是先解密再异或)

DES加密和解密java代码

DES加密和解密java代码

DES加密和解密java代码

在说DES加密算法之前,我们⾸先了解⼏个基本概念:

1. 明⽂:明⽂是指没有经过加密的数据。⼀般⽽⾔,明⽂都是等待传输的数据。由于没有经过加密,明⽂很容易被识别与破解,因此在

传输明⽂之前必须进⾏加密处理。

2. 密⽂:密⽂只是明⽂经过某种加密算法⽽得到的数据,通常密⽂的形式复杂难以识别及理解。

3. 密钥:密钥是⼀种参数,它是在明⽂转换为密⽂或将密⽂转换为明⽂的算法中输⼊的参数。

4. 对称加密:通信双⽅同时掌握⼀个密钥,加密解密都是由⼀个密钥完成的(即加密密钥等于解密密钥,加解密密钥可以相互推倒出

来)。双⽅通信前共同拟定⼀个密钥,不对第三⽅公开。

5. 分组加密:分组密码是将明⽂分成固定长度的组,每⼀组都采⽤同⼀密钥和算法进⾏加密,输出也是固定长度的密⽂。

好了了解这些以后,我们再来说DES加密算法。DES 算法是⼀种常见的分组加密算法,由IBM公司在1971年提出。DES 算法是分组加密算法的典型代表,同时也是应⽤最为⼴泛的对称加密算法。下⾯我们详细介绍下:

1.分组长度:DES 加密算法中,明⽂和密⽂为 64 位分组。密钥的长度为 64 位,但是密钥的每个第⼋位设置为奇偶校验位,因此密钥的实际长度为56位。

2.加密流程:DES 加密算法⼤致分为 4 步:初始置换、⽣成⼦密钥、迭代过程、逆置换。

代码如下:

需特别注意:不要使⽤JDK中⾃带的sun.misc.BASE64Decoder类去做BASE64,该类会在最后⾯多加换⾏。

⽽应使⽤apache中的mons.codec.binary.Base64这个类来做base64加密。(待验证)

DES可逆加密算法JAVA源代码

DES可逆加密算法JAVA源代码

DES可逆加密算法JAVA源代码

下面是一个实现DES可逆加密算法的Java源代码。该代码共1281个字符(字母、符号、数字)。

```java

import javax.crypto.Cipher;

import javax.crypto.SecretKey;

import javax.crypto.SecretKeyFactory;

import javax.crypto.spec.DESKeySpec;

import java.nio.charset.StandardCharsets;

import java.util.Base64;

public class DES

private static final String key = "mysecret"; // 设置密钥

public static void main(String[] args)

String plainText = "Hello, World!"; // 要进行加密的明文

String encryptedText = encrypt(plainText);

System.out.println("Encrypted text: " + encryptedText);

String decryptedText = decrypt(encryptedText);

System.out.println("Decrypted text: " + decryptedText);

}

public static String encrypt(String plainText)

des算法标准代码

des算法标准代码

des算法标准代码

一、概述

DES(数据加密标准)是一种常用的对称加密算法,它使用64位的密钥对数据进行加密和解密。本标准代码文档旨在提供DES算法的完整实现,以便读者了解其工作原理和实现细节。

二、算法描述

1. 密钥生成:DES算法使用一个56位的密钥,通过一系列复杂的算法将其转换为64位的数据。

2. 加密过程:加密过程包括三个步骤:初始置换、分组和迭代。在迭代过程中,每个分组被替换为新的分组,并使用密钥进行置换和移位操作。

3. 解密过程:解密过程与加密过程类似,但使用与加密时相反的置换和移位操作。

三、代码实现

以下是一个简单的Python实现示例:

```python

from Crypto.Cipher import DES

from Crypto.Util.Padding import pad, unpad

from binascii import hexlify, unhexlify

import random

# 密钥生成函数

def generate_key(bit_length=8):

key = [0]*64

for i in range(bit_length//8):

random.shuffle(key[:8]) # 使用随机数填充8字节密钥的一部分 if i != bit_length//8-1: # 最后一位用校验位替代,所以不算进bit_length长度中

random.shuffle(key[8:]) # 对剩余字节打乱顺序,以保护剩余部分的秘密性

return key.tolist() # 转换为列表便于序列化处理

DES算法源代码

DES算法源代码
for(i=0;i<26;i++)
A[i]=A[i+2];
A[26]=n;
A[27]=m;
n=B[0];
m=B[1];
for(i=0;i<26;i++)
B[i]=B[i+2];
B[26]=n;
B[27]=m;
}
for(i=0;i<28;i++) //将A和B合并成56位
{
keyAB[i]=A[i];
{
if(move[t]==1) //按照循环移位表将Ai和Bi分别左移move[t]位
{
n=A[0];
for(i=0;i<27;i++)
A[i]=A[i+1];
A[27]=n;
n=B[0];
for(i=0;i<28;i++)
B[i]=B[i+1];
B[27]=n;
}
else
{
n=A[0];
m=A[1];
int RKS[8]; //存放经过查找8个S表后得到的8个十进制结果
int SP[32]; //将RKS表中的十进制数化成二进制
int RKSP[32]; //存放SP表经过P盒换位后的结果
int text_end[64]; //存放经过左右32位换位后的结果

C#JavaDES加密解密

C#JavaDES加密解密

C#JavaDES加密解密

转⾃/zhuiyi/archive/2013/04/01/2993201.html

最近被DES加解密弄得超级郁闷,我⽤C#的⽅法加密得到的密⽂⽼是跟客户给的Java的加密密⽂不同,找了很多资料都没有得到解决。直到看到上⾯的博⽂,才解决掉这个问题。这⾥mark⼀下,以免忘记!

先来个C#版的:

1public class DESHelper

2 {

3

4///<summary>

5/// DES加密算法

6///</summary>

7///<param name="encryptString">要加密的字符串</param>

8///<param name="sKey">加密码Key</param>

9///<returns>正确返回加密后的结果,错误返回源字符串</returns>

10public static string ToDESEncrypt(string encryptString, string sKey)

11 {

12try

13 {

14

15byte[] keyBytes = Encoding.UTF8.GetBytes(sKey);

16byte[] keyIV = keyBytes;

17byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);

18

19 DESCryptoServiceProvider desProvider = new DESCryptoServiceProvider();

JAVADES加密(DESECBPKCS5Padding)和C#加密对应设置

JAVADES加密(DESECBPKCS5Padding)和C#加密对应设置

JAVADES加密(DESECBPKCS5Padding)和C#加密对应设置 最近在项⽬中需要做java中DES加密和C#DES的对应设置,java代码如下所⽰:

public static String encryptDES(String paramString1, String paramString2)

throws Exception

{

SecretKeySpec localSecretKeySpec = new SecretKeySpec(paramString2.getBytes(), "DES");

Cipher localCipher = Cipher.getInstance("DES/ECB/PKCS5Padding");

localCipher.init(1, localSecretKeySpec);

return Base64.encode(localCipher.doFinal(paramString1.getBytes()));

}

⽹上搜到的C#对应都是如下所⽰:

public static string Encrypt(string pToEncrypt, string sKey)

{

using (DESCryptoServiceProvider des =

new DESCryptoServiceProvider())

{

byte[] inputByteArray = Encoding.UTF8.GetBytes(pToEncrypt);

des.Key = Encoding.UTF8.GetBytes(sKey);

S-DES加密算法的JAVA实现

S-DES加密算法的JAVA实现

周胜安(200620109286) 计算机科学与工程研一(2)班S-DES加密算法的JAVA实现

一、实验要求

(1)简述S-DES的加密算法的主要思想

(2)实现的主要步骤,及各个步骤的主要思想及示意图

(3)给出程序的分析,运行结果和程序的效率分析

(4)通过编程实现S-DES加密算法,了解DES加密的原理,也加深对现代对称

密码的理解。

二、算法思想

•加密算法的数学表示:

密文=IP-1fk2(SW(fk1(IP(明文)))))

其中K1=P8(移位(P10(密钥K)))

K2=P8(移位(移位(P10(密钥K))))

• 解密算法的数学表示:

明文=IP-1(fk1(SW(fk2(IP(密文)))))

S-DES 加密方法示意图:

S-DES算法涉及加密、密钥产生、解密三个部分。流程图(每个函数的算

法见源代码)

三、算法流程框图、各模块说明

实验是用JAVA实现的

(1)密钥的产生

密钥产生的示意图:

密钥的产生算法涉及五个函数定义

(1)初始置换P10 其中P10的定义为:

P10(k1,k2,…,k10)=(k3,k5,k2,k7,k4,k10,k1,k9,k8,k6)

(2)LS-1操作:对密钥的左右两组循环左移一位(密钥分成5位一组,共2组)

(3)P8置换产生Key1。其中P8的定义为:

P8(k1,k2,…,k10)=(k6,k3,k7,k4,k8,k5,k10,k9)

(4)LS-2操作: :对密钥的左右两组循环左移两位.

(5) P8置换产生Key2

(2) S-DES 的加密过程

示意图:

加密算法涉及五个函数:

DES加密算法的Java实现

DES加密算法的Java实现

信息安全概论JAVA实现DES加密算法

学号:********* 姓名:高玉林

Java实现DES加密算法

目录

DES算法概述 (3)

DES的加密过程 (4)

DES算法细节 (4)

DES的解密过程 (8)

源代码与结果(使用Java实现) (9)

源代码 (9)

运行结果截图 (21)

默认密钥(“这不是密码”) (21)

用户自定义密钥(以“nuaasillydes”为例) (21)

总结 (22)

DES算法概述

DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法。它是ANSI的数据加密算法和ISO的DEA-1,成为一个世界范围内的标准已经近30年。尽管DES带有过去时代的特征,但是它很好的抵抗住了多年的密码分析,除可能的最强有力的敌手外,对其他的攻击仍是安全的。

DES是一个分组加密算法,它以64位为一组对数据进行加密。64位一组的明文从算法的一端输入,64位的密文从另一端输出。DES是一个对称算法:加密与解密用的是同一算法(除密钥编排不同以外)。密钥的长度为56位,通常表示为64位的数,但是每个第八位都用作奇偶校验,可以忽略。密钥可以是任意的56位的数,且可在任意的时候改变。DES的整体结构为:

DES的加密过程

DES的加密过程如下。

(1)64位的密钥经子密钥产生算法产生出16个子密钥K1,K2,……,K16,分别供第1

次,第2次,……,第16次加密迭代使用。

(2)64位明文首先经过初始置换IP(Initial Permutation),将数据打乱重新排列并分

java实现DES加密算法

java实现DES加密算法

数据结构算法:java实现DES加密算法

java实现DES加密算法

为了实现一对密钥对整个项目所有加密解密文件都适用的方法,考试,大提示采用先生成一对密钥.保存到xml文件中,以后获得私匙和公钥只需要从xml文件中取得就可以了.

/**

* 把成生的一对密钥保存到DesKey.xml文件中

*/

public static void saveDesKey(){

try {

SecureRandom sr = new SecureRandom();

//为我们选择的DES算法生成一个KeyGenerator对象

KeyGenerator kg = KeyGenerator.getInstance (\"DES\" );

kg.init (sr);

FileOutputStream fos = new FileOutputStream(\"C:/DesKey.xml\");

ObjectOutputStream oos = new ObjectOutputStream(fos);

//生成密钥

Key key = kg.generateKey();

oos.writeObject(key);

oos.close();

} catch (Exception e) {

e.printStackTrace();

}

}

获取密钥方法如下:

/**

* 获得DES加密的密钥。在交易处理的过程中应该定时更

* 换密钥。需要JCE的支持,如果jdk版本低于1.4,则需要

* 安装jce-1_2_2才能正常使用。

* @return Key 返回对称密钥

DES算法Java实现源代码

DES算法Java实现源代码
*2.将该48位的输出与子密钥Ki进行异或操作,运算结果经过S盒代换运算,得到一个32位比特的输出。
*3。该32位比特输出再经过P置换表进行P运算,将其各位打乱重排,生成32位的输出。
*
* @author Ouyang
*
*/
public class Des {
int[] byteKey;
public Des(int[] byteKey) {
26, 5, 18, 31, 10, 2, 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22,
11, 4, 25 }; // 32
private static final int[][][] S_Box = {// S-盒
{// S_Box[1]
{ 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7 },
10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47,
55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36,
29, 32 }; // 48
private static final int[] E = { 32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9,

DES加密算法的JAVA实现 (2)

DES加密算法的JAVA实现 (2)

以上是 DES 算法加密原理。
图表 8 4
2.2 子密钥的生成 64 比特的密钥生成 16 个 48 比特的子密钥。其生成过程见图:
图表 9 子密钥生成过程
具体解释如下:
64
比特的密钥 K,经过 PC-1(置换 A)后,生成 56 比特的串。其下标如表所示:
57 49 41
33
25
17
9
1
58 50
要求对本课题要达到的目标和实验效果进行分析。
2 DES 算法加解密原理
DES 算法由加密、子密钥和解密的生成三部分组成。现将 DES 算法介绍如下。 2.1 加密
DES 算法处理的数据对象是一组 64 比特的明文串。设该明文串为 m=m1m2…m64 (mi=0 或 1)。明文串经过 64 比特的密钥 K 来加密,最后生成长度为 64 比特的密文 E。其加密过程图 示如下:
for (i = 0; i < 64; i++) { M[i] = timeData[IP[i] - 1]; }
迭代(由于各次迭代的方法相同只是输入输出不同,因此以任意一次为例): 首先进行 S 盒的运算。 输入 32 位比特串, 经过 E 变换,由 32 位变为 48 位:
for (i = 0; i < 48; i++) { RE[i] = R0[E[i] - 1];

JAVA使用DES加密解密

JAVA使用DES加密解密

JAVA使⽤DES加密解密

在使⽤DES加密解密的时候,遇到了⼀些问题,廖记⼀下。如有哪位⼤神亲临留⾔指点,不胜感激。先上代码:

public DESUtil() {

}

//密码,长度要是8的倍数注意此处为简单密码简单应⽤要求不⾼时可⽤此密码

/*DES是⼀种对称加密算法,所谓对称加密算法即:加密和解密使⽤相同密钥的算法。DES加密算法出⾃IBM的研究,

后来被美国政府正式采⽤,之后开始⼴泛流传,但是近些年使⽤越来越少,因为DES使⽤56位密钥,以现代计算能⼒,

24⼩时内即可被破解。*/

private static String password = "9588888888880288";

//测试

public static void main(String args[]) {

//待加密内容

String str = "task_id=TSK_000000006870&ledger_id=0715-5572";

String result = DESUtil.encrypt(str);

BASE64Encoder base64en = new BASE64Encoder();

// String strs = new String(base64en.encode(result));

System.out.println("加密后:"+result);

//直接将如上内容解密

try {

String decryResult = DESUtil.decryptor(result);

System.out.println("解密后:"+new String(decryResult));

DES详解(Java实现)

DES详解(Java实现)

DES详解(Java实现)

DES

数据加密标准(Data Encryption Standard),简称DES,是由IBM公司提交,美国政府于1977年1⽉5⽇颁布的⼀种加密算法。

DES的设计⽬标是,⽤于加密保护静态存储和传输信道中的数据,安全使⽤10~15年。

DES综合运⽤了置换、代替、代数等多种密码技术。它设计精巧、实现容易、使⽤⽅便,堪称是适应计算机环境的近代分组密码的⼀个典范。DES的设计充分体现了Shannon所阐述的设计密码的思想,标志着密码的设计与分析达到了新的⽔平。

DES是⼀种分组密码。明⽂、密⽂和密钥的分组长度都是64位。

DES是⾯向⼆进制的密码算法。因⽽能够加解密任何形式的计算机数据。

DES是对合运算,因⽽加密和解密共⽤同⼀算法,从⽽使⼯程实现的⼯作量减半。

DES的密码结构属于Feistel结构。

Feistel结构

Feistel结构是IBM的密码专家Horst Feistel最早提出的。由于它是对称的密码结构,所以对信息加密和解密的过程就极为相似,甚⾄完全⼀样。这就使得在实施的过程中,对编码量和线路传输的要求就减少了⼏乎⼀半。

加密结构

L i = R i-1

R i = L i-1 ⊕ f ( R i-1 , k i )

解密结构

L i-1 = R i ⊕ f ( L i , k i )

R i-1 = L i

影响因素

影响Feistel结构的因素有以下5个:

1.块的⼤⼩:⼤的块会提⾼加密的安全性,但是会降低加密、解密的速度;

2.密钥的⼤⼩:⼤的密钥也会提⾼加密的安全性,但是也会降低加密、解密的速度;

DES加密算法的JAVA实现【长春理工】

DES加密算法的JAVA实现【长春理工】

编号

本科生应用方向实训

DES算法文件加/解密工具

DES algorithm file encryption / decryption tool

学生姓名

专业

学号

指导教师

学院计算机科学技术学院

二〇一四年七月

目录

摘要 (1)

一、目的与意义 (2)

二、DES概述 (3)

三、DES算法加解密原理 (4)

1.加密 (4)

2、子密钥的生成 (9)

3解密 (11)

四、软件界面实现 (12)

1.主界面 (12)

2.加密 (12)

3.解密 (12)

五、加解密算法的实现 (13)

六、总结 (22)

参考文献 (23)

摘要

1973年5月15 日,美国国家标准局(现在的美国国家标准就是研究所,即NIST)在联邦记录中公开征集密码体制,这一举措最终导致了数据加密标准(DES)的出现,它曾经成为世界上最广泛使用的密码体制。DES由IBM开发,它是早期被称为Lucifer体制的改进。DES在1975年3月17日首次在联邦记录中公布,在经过大量的公开讨论后,1977年2月15日DES被采纳为“非密级”应用的一个标准。最初预期DES作为标准只能使用10~15年;然而,事实证明DES要长寿得多。被采纳后,大约每隔5年就被评审一次。DES的最后一次评审是在1999年1月。

本文阐述了DES发展现状及对网络安全的重要意义,并在此基础上对DES算法原理进行详细的介绍和分析。通过应用DES算法加解密的具体实现,进一步加深对DES算法的理解,论证了DES算法具有加密快速且强壮的优点,适合对含有大量信息的文件进行加密,同时分析了DES算法密钥过短(56位)所带来的安全隐患。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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,

40, 32, 24, 16, 8, 57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35,

27, 19, 11, 3, 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31,

23, 15, 7 }; // 64

private static final int[] IP_1 = { 40, 8, 48, 16, 56, 24, 64, 32, 39, 7,

47, 15, 55, 23, 63, 31, 38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45,

13, 53, 21, 61, 29, 36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11,

51, 19, 59, 27, 34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49,

17, 57, 25 }; // 64

private static final int[] PC_1 = { 57, 49, 41, 33, 25, 17, 9, 1, 58, 50,

42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44,

36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6,

61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4 }; // 56

private static final int[] PC_2 = { 14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21,

10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47,

55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36,

29, 32 }; // 48

private static final int[] E = { 32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9,

10, 11, 12, 13, 12, 13, 14, 15, 16, 17, 16, 17, 18, 19, 20, 21, 20,

21, 22, 23, 24, 25, 24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32, 1 }; // 48 private static final int[] P = { 16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23,

26, 5, 18, 31, 10, 2, 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22,

11, 4, 25 }; // 32

private static final int[][][] S_Box = {// S-盒

{// S_Box[1]

{ 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7 },

{ 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8 },

{ 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0 },

{ 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13 } }, { // S_Box[2]

{ 15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10 },

{ 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5 },

{ 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15 },

{ 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9 } }, { // S_Box[3]

{ 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8 },

{ 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1 },

{ 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7 },

{ 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12 } }, { // S_Box[4]

{ 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15 },

{ 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9 },

{ 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4 },

{ 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14 } }, { // S_Box[5]

相关文档
最新文档