`
- 浏览:
505299 次
- 性别:
- 来自:
广州
-
-
- 原作者:http://jatula.iteye.com/blog/315449
-
package
cn.lake.util;
-
-
-
-
-
-
-
-
class
IDEADemo {
-
-
-
private
byte
m_string[];
-
-
private
byte
c_string[];
-
-
private
byte
k_string[];
-
-
private
char
X1, X2, X3, X4;
-
-
private
char
Z[];
-
-
private
char
Z_1[];
-
-
private
char
temp1, temp2, temp3, temp4, temp5;
-
private
char
temp6, temp7, temp8, temp9, temp10;
-
-
-
IDEADemo() {
-
m_string = new
byte
[
8
];
-
c_string = new
byte
[
8
];
-
k_string = new
byte
[
16
];
-
Z = new
char
[
53
];
-
Z_1 = new
char
[
53
];
-
}
-
-
-
private
char
inv(
char
x) {
-
char
t0, t1, q, y;
-
if
(x <=
1
)
-
return
x;
-
t1 = (char
) (
0x10001
/ x);
-
-
y = (char
) (
0x10001
% x);
-
if
(y ==
1
)
-
return
(
char
) (
1
- t1);
-
t0 = 1
;
-
do
{
-
q = (char
) (x / y);
-
x = (char
) (x % y);
-
t0 += (char
) (q * t1);
-
if
(x ==
1
)
-
return
t0;
-
q = (char
) (y / x);
-
y = (char
) (y % x);
-
t1 += (char
) (q * t0);
-
} while
(y !=
1
);
-
return
(
char
) (
1
- t1);
-
}
-
-
-
private
char
multiply(
char
input1,
char
input2) {
-
long
p = input1 * input2;
-
if
(p ==
0
)
-
input2 = (char
) (
65537
- input1 - input2);
-
else
{
-
input1 = (char
) (p >>
16
);
-
input2 = (char
) p;
-
input1 = (char
) (input2 - input1);
-
-
if
(input2 < input1)
-
input1 += 65537
;
-
}
-
return
input1;
-
}
-
-
-
private
void
Separate_m_2_X() {
-
-
-
char
temp;
-
-
X1 = (char
) m_string[
0
];
-
X1 <<= 8
;
-
temp = (char
) m_string[
1
];
-
temp &= 0xFF
;
-
X1 |= temp;
-
-
X2 = (char
) m_string[
2
];
-
X2 <<= 8
;
-
temp = (char
) m_string[
3
];
-
temp &= 0xFF
;
-
X2 |= temp;
-
-
X3 = (char
) m_string[
4
];
-
X3 <<= 8
;
-
temp = (char
) m_string[
5
];
-
temp &= 0xFF
;
-
X3 |= temp;
-
-
X4 = (char
) m_string[
6
];
-
X4 <<= 8
;
-
temp = (char
) m_string[
7
];
-
temp &= 0xFF
;
-
X4 |= temp;
-
}
-
-
-
-
-
-
-
-
-
void
Set_k(
byte
[] input_k_string) {
-
-
for
(
int
i =
0
; i <=
15
; i++)
-
k_string[i] = input_k_string[i];
-
}
-
-
-
-
-
-
-
-
-
void
Creat_encrypt_sub_k() {
-
-
-
char
temp;
-
byte
temp1, temp2, temp3;
-
int
i;
-
int
num;
-
for
(num =
0
; num <=
6
; num++) {
-
Z[1
+ num *
8
] = (
char
) k_string[
0
];
-
Z[1
+ num *
8
] <<=
8
;
-
temp = (char
) k_string[
1
];
-
temp = (char
) (temp &
0x00FF
);
-
Z[1
+ num *
8
] |= temp;
-
-
Z[2
+ num *
8
] = (
char
) k_string[
2
];
-
Z[2
+ num *
8
] <<=
8
;
-
temp = (char
) k_string[
3
];
-
temp = (char
) (temp &
0x00FF
);
-
Z[2
+ num *
8
] |= temp;
-
-
Z[3
+ num *
8
] = (
char
) k_string[
4
];
-
Z[3
+ num *
8
] <<=
8
;
-
temp = (char
) k_string[
5
];
-
temp = (char
) (temp &
0x00FF
);
-
Z[3
+ num *
8
] |= temp;
-
-
Z[4
+ num *
8
] = (
char
) k_string[
6
];
-
Z[4
+ num *
8
] <<=
8
;
-
temp = (char
) k_string[
7
];
-
temp = (char
) (temp &
0x00FF
);
-
Z[4
+ num *
8
] |= temp;
-
if
(num !=
6
) {
-
Z[5
+ num *
8
] = (
char
) k_string[
8
];
-
Z[5
+ num *
8
] <<=
8
;
-
temp = (char
) k_string[
9
];
-
temp = (char
) (temp &
0x00FF
);
-
Z[5
+ num *
8
] |= temp;
-
}
-
if
(num !=
6
) {
-
Z[6
+ num *
8
] = (
char
) k_string[
10
];
-
Z[6
+ num *
8
] <<=
8
;
-
temp = (char
) k_string[
11
];
-
temp = (char
) (temp &
0x00FF
);
-
Z[6
+ num *
8
] |= temp;
-
}
-
if
(num !=
6
) {
-
Z[7
+ num *
8
] = (
char
) k_string[
12
];
-
Z[7
+ num *
8
] <<=
8
;
-
temp = (char
) k_string[
13
];
-
temp = (char
) (temp &
0x00FF
);
-
Z[7
+ num *
8
] |= temp;
-
}
-
if
(num !=
6
) {
-
Z[8
+ num *
8
] = (
char
) k_string[
14
];
-
Z[8
+ num *
8
] <<=
8
;
-
temp = (char
) k_string[
15
];
-
temp = (char
) (temp &
0x00FF
);
-
Z[8
+ num *
8
] |= temp;
-
}
-
-
-
-
temp1 = k_string[0
];
-
temp2 = k_string[1
];
-
temp3 = k_string[2
];
-
for
(i =
0
; i <=
12
; i++)
-
k_string[i] = k_string[i + 3
];
-
k_string[13
] = temp1;
-
k_string[14
] = temp2;
-
k_string[15
] = temp3;
-
-
-
byte
store_bit[] =
new
byte
[
16
];
-
for
(i =
15
; i >=
0
; i--) {
-
-
store_bit[i] = (byte
) (k_string[i] >>
7
);
-
store_bit[i] &= 0x01
;
-
k_string[i] <<= 1
;
-
if
(i !=
15
)
-
k_string[i] += store_bit[i + 1
];
-
}
-
k_string[15
] += store_bit[
0
];
-
-
}
-
}
-
-
-
-
-
-
-
-
-
void
Creat_decrypt_sub_k() {
-
-
Z_1[1
] = inv(Z[
49
]);
-
Z_1[2
] = (
char
) (
0
- Z[
50
]);
-
Z_1[3
] = (
char
) (
0
- Z[
51
]);
-
Z_1[4
] = inv(Z[
52
]);
-
Z_1[5
] = (
char
) (Z[
47
]);
-
Z_1[6
] = Z[
48
];
-
-
for
(
int
i =
1
; i <=
7
; i++) {
-
Z_1[1
+ i *
6
] = inv(Z[
49
- i *
6
]);
-
Z_1[2
+ i *
6
] = (
char
) (
0
- Z[
51
- i *
6
]);
-
Z_1[3
+ i *
6
] = (
char
) (
0
- Z[
50
- i *
6
]);
-
Z_1[4
+ i *
6
] = inv(Z[
52
- i *
6
]);
-
Z_1[5
+ i *
6
] = Z[
47
- i *
6
];
-
Z_1[6
+ i *
6
] = Z[
48
- i *
6
];
-
}
-
Z_1[49
] = inv(Z[
1
]);
-
Z_1[50
] = (
char
) (
0
- Z[
2
]);
-
Z_1[51
] = (
char
) (
0
- Z[
3
]);
-
Z_1[52
] = inv(Z[
4
]);
-
}
-
-
-
-
-
-
-
-
-
void
Set_m(
byte
[] input_m_string) {
-
-
for
(
int
i =
0
; i <=
7
; i++)
-
m_string[i] = input_m_string[i];
-
}
-
-
-
-
-
-
-
-
-
void
Encrypt() {
-
-
-
-
Separate_m_2_X();
-
-
-
for
(
int
num =
0
; num <=
7
; num++) {
-
temp1 = multiply(Z[1
+ num *
6
], X1);
-
temp2 = (char
) (X2 + Z[
2
+ num *
6
]);
-
temp3 = (char
) (X3 + Z[
3
+ num *
6
]);
-
temp4 = multiply(Z[4
+ num *
6
], X4);
-
temp5 = (char
) (temp1 ^ temp3);
-
temp6 = (char
) (temp2 ^ temp4);
-
temp7 = multiply(Z[5
+ num *
6
], temp5);
-
temp8 = (char
) (temp7 + temp6);
-
temp10 = multiply(Z[6
+ num *
6
], temp8);
-
temp9 = (char
) (temp7 + temp10);
-
-
X1 = (char
) (temp1 ^ temp10);
-
if
(num !=
7
) {
-
X2 = (char
) (temp3 ^ temp10);
-
X3 = (char
) (temp2 ^ temp9);
-
} else
{
-
X2 = (char
) (temp2 ^ temp9);
-
X3 = (char
) (temp3 ^ temp10);
-
}
-
X4 = (char
) (temp4 ^ temp9);
-
}
-
-
-
X1 = multiply(Z[49
], X1);
-
X2 += Z[50
];
-
X3 += Z[51
];
-
X4 = multiply(Z[52
], X4);
-
-
-
-
c_string[1
] = (
byte
) X1;
-
c_string[0
] = (
byte
) (X1 >>
8
);
-
c_string[3
] = (
byte
) X2;
-
c_string[2
] = (
byte
) (X2 >>
8
);
-
c_string[5
] = (
byte
) X3;
-
c_string[4
] = (
byte
) (X3 >>
8
);
-
c_string[7
] = (
byte
) X4;
-
c_string[6
] = (
byte
) (X4 >>
8
);
-
-
-
}
-
-
-
-
-
-
-
-
-
void
Decrypt() {
-
-
-
Separate_m_2_X();
-
-
-
for
(
int
num =
0
; num <=
7
; num++) {
-
temp1 = multiply(Z_1[1
+ num *
6
], X1);
-
temp2 = (char
) (X2 + Z_1[
2
+ num *
6
]);
-
temp3 = (char
) (X3 + Z_1[
3
+ num *
6
]);
-
temp4 = multiply(Z_1[4
+ num *
6
], X4);
-
temp5 = (char
) (temp1 ^ temp3);
-
temp6 = (char
) (temp2 ^ temp4);
-
temp7 = multiply(Z_1[5
+ num *
6
], temp5);
-
temp8 = (char
) (temp7 + temp6);
-
temp10 = multiply(Z_1[6
+ num *
6
], temp8);
-
temp9 = (char
) (temp7 + temp10);
-
-
X1 = (char
) (temp1 ^ temp10);
-
if
(num !=
7
) {
-
X2 = (char
) (temp3 ^ temp10);
-
X3 = (char
) (temp2 ^ temp9);
-
} else
{
-
X2 = (char
) (temp2 ^ temp9);
-
X3 = (char
) (temp3 ^ temp10);
-
}
-
X4 = (char
) (temp4 ^ temp9);
-
}
-
-
-
X1 = multiply(Z_1[49
], X1);
-
X2 += Z_1[50
];
-
X3 += Z_1[51
];
-
X4 = multiply(Z_1[52
], X4);
-
-
-
-
c_string[1
] = (
byte
) X1;
-
c_string[0
] = (
byte
) (X1 >>
8
);
-
c_string[3
] = (
byte
) X2;
-
c_string[2
] = (
byte
) (X2 >>
8
);
-
c_string[5
] = (
byte
) X3;
-
c_string[4
] = (
byte
) (X3 >>
8
);
-
c_string[7
] = (
byte
) X4;
-
c_string[6
] = (
byte
) (X4 >>
8
);
-
-
}
-
-
-
-
-
-
-
-
-
void
Get_c(
byte
[] output_c_string) {
-
-
for
(
int
i =
0
; i <=
7
; i++)
-
output_c_string[i] = c_string[i];
-
}
-
-
public
static
void
main(String[] args) {
-
int
i;
-
IDEADemo demoTest = new
IDEADemo();
-
byte
[] m = {
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
};
-
byte
[] k = {
9
,
8
,
7
,
6
,
5
,
4
,
3
,
2
,
1
,
0
,
1
,
2
,
3
,
4
,
5
,
6
};
-
byte
[] c =
new
byte
[
8
];
-
demoTest.Set_k(k);
-
demoTest.Creat_encrypt_sub_k();
-
demoTest.Creat_decrypt_sub_k();
-
System.out.println("密钥:"
);
-
for
(i =
0
; i <=
15
; i++)
-
System.out.print(k[i]);
-
System.out.println(""
);
-
-
demoTest.Set_m(m);
-
System.out.println("明文:"
);
-
for
(i =
0
; i <=
7
; i++)
-
System.out.print(m[i]);
-
System.out.println(""
);
-
-
demoTest.Encrypt();
-
demoTest.Get_c(c);
-
System.out.println("密文:"
);
-
for
(i =
0
; i <=
7
; i++)
-
System.out.print((int
) (c[i]) +
" "
);
-
System.out.println(""
);
-
-
demoTest.Set_m(c);
-
demoTest.Decrypt();
-
demoTest.Get_c(c);
-
System.out.println("解密后明文:"
);
-
for
(i =
0
; i <=
7
; i++)
-
System.out.print(c[i]);
-
System.out.println(""
);
-
-
System.out.println("hello!"
);
-
}
-
}
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
IDEA(International Data Encryption Algorithm,国际数据加密算法)是一种高效且安全的对称加密算法,以其快速和强大的安全性在许多应用场景中得到广泛应用。在Oracle数据库中实现IDEA加密,可以确保存储在数据库...
通过使用这款软件,就能帮助用户对编解码、编码转换、字符处理、哈希、MAC、对称加密、非对加密。软件是用Java语言编写的,要运行该软件,需要安装JDK环境。安装好JDK环境后,直接运行解压目录下的ToolsFx .bat文件...
DesDemo: 展示了DES对称加密算法的基本实现,包括加密和解密操作。 IDEADemo: 演示了如何使用IDEA加密算法进行加密和解密,包括密钥生成和转换。 MD5Demo: 提供了一个MD5哈希算法的实现,展示了如何计算字符串的...
在Java的JDK中,提供了多种加密方法,包括对称加密和非对称加密。这里我们主要讨论对称加密,因为它是Java中最常用且基础的加密方式。 对称加密是一种使用同一密钥进行加密和解密的加密技术。它的优点在于加解密...
"IDEA:Java实现的国际数据加密算法" 指的是这个项目是用Java编程语言实现的一种名为IDEA(International Data Encryption Algorithm)的加密算法。IDEA是一种对称密钥加密算法,它在数据加密领域中被广泛应用,提供...
IDEA加密算法是一种高效的对称加密算法,在JAVA环境中实现IDEA不仅可行而且具有较高的安全性。通过利用JAVA提供的加密库(如JCA和JCE),开发者可以轻松地实现IDEA算法,并确保其实现的安全性和性能。尽管IDEA在某些...
RSA算法是一种非对称加密算法,它在信息安全领域有着广泛的应用,特别是在数据传输的安全性上。这个Java实现的示例提供了RSA加密和解密的功能,并且结合了`sun.misc.BASE64Decoder.jar`来处理Base64编码,使得加密后...
在这个项目中,我们关注的是使用Scala实现的3DES(Triple Data Encryption Standard)加密算法,这是一种广泛使用的对称加密算法,常用于保护敏感数据,如数据库中的用户名和密码。 3DES,也称为TDES或3DES-EDE(三...
DES(Data Encryption Standard)是一种对称加密算法,使用64位的数据分组,56位的密钥,并且加密和解密使用相同的算法,只是密钥不同。尽管DES现在已经不够安全,但作为示例,它可以用来演示Java中如何实现加解密...
RSA算法是一种非对称加密算法,它在信息安全领域有着广泛的应用,例如数据加密、数字签名等。该算法基于两个大素数的乘积是难以分解的数学难题,从而实现加密和解密。在这个"RSA_JS_JAVA"项目中,我们看到涉及到...
1. **开发工具**:可能使用IDEA、Eclipse等Java集成开发环境进行编码和调试。 2. **版本控制**:如Git,用于代码版本管理和协作。 3. **构建工具**:Maven或Gradle,帮助管理依赖,自动化构建和打包项目。 4. **测试...
### 字符串加密算法详解 #### 一、引言 在信息安全领域,字符串加密是...Java AES加密算法作为一种广泛使用的对称加密算法,不仅适用于保护数据的机密性和完整性,而且其实现相对简单,易于集成到各种应用程序中。
RSA是一种非对称加密算法,广泛应用于公钥基础设施(PKI)中,而SM2是中国国家标准的公钥密码算法,支持签名、加密和密钥交换。在Java中,`java.security.KeyPairGenerator`类可以用来生成RSA或SM2的密钥对,而`...
1. **加密算法支持**:`org.bouncycastle`提供了大量的对称和非对称加密算法,例如AES(高级加密标准)、Blowfish、DES(数据加密标准)、3DES(三重DES)、RSA(公钥加密标准)、DSA(数字签名算法)等。...
17. **编码与加解密**:Base64用于编码,MD5用于消息摘要,对称加密如AES,非对称加密如RSA,为数据传输提供安全性。 18. **测试与日志**:JUnit用于单元测试,log4j等工具用于记录程序运行日志。 19. **IDE**:...
AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,用于保护数据安全。开发者可能需要这样的工具来加密敏感信息,如数据库密码或用户数据。Java提供内置的javax.crypto包来实现AES加密,通过定义...
IDEA则是一种对称加密算法,提供快速的数据加密。 2. **数字签名**:PGP 提供了数字签名功能,通过用户的私钥对数据进行签名,任何人都可以使用对应的公钥验证签名的真实性,确保信息未被篡改。 3. **密钥管理**:...
1. **加密算法**:在Cipher Program中,你可能需要实现或使用已有的加密算法,如对称加密(如AES,DES)或非对称加密(如RSA,ECC)。这些算法在信息安全领域起着至关重要的作用,用于保护数据的隐私和完整性。 2. ...
- RSA是一种非对称加密算法,C#和Java都支持,但它们在存储和表示密钥的方式上有差异。 - C#使用XML字符串存储公私钥,而Java通常采用PKCS#8(私钥)和X.509(公钥)格式,这些格式基于ASN.1编码规则。 5. **密钥...
1. 密码学原理:包括对称加密(如DES、AES)和非对称加密(如RSA、ECC)的工作原理,以及它们在实际应用中的优缺点。 2. 哈希函数:MD5、SHA系列等哈希算法的特性,以及碰撞攻击和预映射攻击的概念。 3. 密钥管理:...