`
- 浏览:
493940 次
- 性别:
- 来自:
广州
-
-
- 原作者: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
相关推荐
java关于加密的算法demo代码(Base64加密\数字签名\对称加密算法\非对称加密算法\消息摘要算法) JAVA安全实现三种方式: 1.JDK 2.Commons Codec 3.Bouncy Castle 一。非对称加密算法: 1.DH 2.RSA 3.ELGamal 二。...
JAVA 对称加密 实现JAVA 对称加密 实现JAVA 对称加密 实现JAVA 对称加密 实现JAVA 对称加密 实现JAVA 对称加密 实现JAVA 对称加密 实现JAVA 对称加密 实现JAVA 对称加密 实现JAVA 对称加密 实现
IDEA算法,对称加密算法,效率比较高的算法,Idea algorithm
支持Java文件遇见的敏感字段的加密 包括对称和非对称加密
非对称加密JAVA实现,实现对超长内容进行加密
对称加密:DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6和AES 非对称加密:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)
IDEA对称加密算法(c语言实现)。 对称加密:整个算法和DES相似。
AES和RSA java实现
6.用对方的公钥对称密钥进行加密(加密密钥) 7.将密文(5)和加密密钥(6)一起发给对方 接收方: 1.用自己的私钥对加密密钥进行解密,得到对称密钥--也只有自己才能解密。 2.用对称密钥对密文进行解密,得到...
试用与java对称加密、.net对称加密,便于java和.net在通信过程中加密传输数据。
java编写的加密解密工具,有对称加密和非对称加密
Java对称与非对称加密解密(AES与RSA) 一、对称加密技术与非对称加密技术简述 二、对称加密技术与非对称加密技术的使用场景简述 三、Java实现使用的是AES的对称加密和RSA的非对称加密 备注:此文包括概念讲解和Java...
包括RSA算法的两种语言实现,原理正确,可以正常运行,对应博客为:https://blog.csdn.net/qq_41112170/article/details/104904340
这是本人总结的Java 非对称 加密 算法,有疑问可以找我1038546502@qq.com
JAVA AES对称加密工具类,可实用;包含加密字符串和文件流
Java非对称加密源码实例。 Java非对称加密源码实例.zip
Java和Android安全加密专题:对称加密,非对称加密,数字摘要,数字签名,数字证书,Https编程
java实现非对称加密代码。
非对称加密。
主要介绍了Java实现的对称加密算法AES,结合实例形式分析了对称加密算法AES的定义、特点、用法及使用场景,需要的朋友可以参考下