Javamysql加密算法函数.docx
《Javamysql加密算法函数.docx》由会员分享,可在线阅读,更多相关《Javamysql加密算法函数.docx(30页珍藏版)》请在冰豆网上搜索。
Javamysql加密算法函数
加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。
大体上分为双向加密和单向加密,而双向加密又分为对称加密和非对称加密(有些资料将加密直接分为对称加密和非对称加密)。
双向加密大体意思就是明文加密后形成密文,可以通过算法还原成明文。
而单向加密只是对信息进行了摘要计算,不能通过算法生成明文,单向加密从严格意思上说不能算是加密的一种,应该算是摘要算法吧。
具体区分可以参考:
(本人解释不清呢……)
一、双向加密
(一)、对称加密
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
需要对加密和解密使用相同密钥的加密算法。
由于其速度,对称性加密通常在消息发送方需要加密大量数据时使用。
对称性加密也称为密钥加密。
所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。
密钥是控制加密及解密过程的指令。
算法是一组规则,规定如何进行加密和解密。
因此对称式加密本身不是安全的。
常用的对称加密有:
DES、IDEA、RC2、RC4、SKIPJACK、RC5、AES算法等
对称加密一般java类中中定义成员
Java代码
1//KeyGenerator提供对称密钥生成器的功能,支持各种算法
2privateKeyGeneratorkeygen;
3//SecretKey负责保存对称密钥
4privateSecretKeydeskey;
5//Cipher负责完成加密或解密工作
6privateCipherc;
7//该字节数组负责保存加密的结果
8privatebyte[]cipherByte;
在构造函数中初始化
Java代码
9Security.addProvider(newcom.sun.crypto.provider.SunJCE());
10//实例化支持DES算法的密钥生成器(算法名称命名需按规定,否则抛出异常)
11keygen=KeyGenerator.getInstance("DES");//
12//生成密钥
13deskey=keygen.generateKey();
14//生成Cipher对象,指定其支持的DES算法
15c=Cipher.getInstance("DES");
1.DES算法为密码体制中的对称密码体制,又被成为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。
明文按64位进行分组,密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位,使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。
Java代码
16importjava.security.InvalidKeyException;
17importjava.security.NoSuchAlgorithmException;
18importjava.security.Security;
19
20importjavax.crypto.BadPaddingException;
21importjavax.crypto.Cipher;
22importjavax.crypto.IllegalBlockSizeException;
23importjavax.crypto.KeyGenerator;
24importjavax.crypto.NoSuchPaddingException;
25importjavax.crypto.SecretKey;
26
27publicclassEncrypDES{
28
29//KeyGenerator提供对称密钥生成器的功能,支持各种算法
30privateKeyGeneratorkeygen;
31//SecretKey负责保存对称密钥
32privateSecretKeydeskey;
33//Cipher负责完成加密或解密工作
34privateCipherc;
35//该字节数组负责保存加密的结果
36privatebyte[]cipherByte;
37
38publicEncrypDES()throwsNoSuchAlgorithmException,NoSuchPaddingException{
39Security.addProvider(newcom.sun.crypto.provider.SunJCE());
40//实例化支持DES算法的密钥生成器(算法名称命名需按规定,否则抛出异常)
41keygen=KeyGenerator.getInstance("DES");
42//生成密钥
43deskey=keygen.generateKey();
44//生成Cipher对象,指定其支持的DES算法
45c=Cipher.getInstance("DES");
46}
47
48/**
49*对字符串加密
50*
51*@paramstr
52*@return
53*@throwsInvalidKeyException
54*@throwsIllegalBlockSizeException
55*@throwsBadPaddingException
56*/
57publicbyte[]Encrytor(Stringstr)throwsInvalidKeyException,
58IllegalBlockSizeException,BadPaddingException{
59//根据密钥,对Cipher对象进行初始化,ENCRYPT_MODE表示加密模式
60c.init(Cipher.ENCRYPT_MODE,deskey);
61byte[]src=str.getBytes();
62//加密,结果保存进cipherByte
63cipherByte=c.doFinal(src);
64returncipherByte;
65}
66
67/**
68*对字符串解密
69*
70*@parambuff
71*@return
72*@throwsInvalidKeyException
73*@throwsIllegalBlockSizeException
74*@throwsBadPaddingException
75*/
76publicbyte[]Decryptor(byte[]buff)throwsInvalidKeyException,
77IllegalBlockSizeException,BadPaddingException{
78//根据密钥,对Cipher对象进行初始化,DECRYPT_MODE表示加密模式
79c.init(Cipher.DECRYPT_MODE,deskey);
80cipherByte=c.doFinal(buff);
81returncipherByte;
82}
83
84/**
85*@paramargs
86*@throwsNoSuchPaddingException
87*@throwsNoSuchAlgorithmException
88*@throwsBadPaddingException
89*@throwsIllegalBlockSizeException
90*@throwsInvalidKeyException
91*/
92publicstaticvoidmain(String[]args)throwsException{
93EncrypDESde1=newEncrypDES();
94Stringmsg="郭XX-搞笑相声全集";
95byte[]encontent=de1.Encrytor(msg);
96byte[]decontent=de1.Decryptor(encontent);
97System.out.println("明文是:
"+msg);
98System.out.println("加密后:
"+newString(encontent));
99System.out.println("解密后:
"+newString(decontent));
100}
101
102}
2.3DES又称TripleDES,是DES加密算法的一种模式,它使用3条56位的密钥对3DES
数据进行三次加密。
数据加密标准(DES)是美国的一种由来已久的加密标准,它使用对称密钥加密法,并于1981年被ANSI组织规范为ANSIX.3.92。
DES使用56位密钥和密码块的方法,而在密码块的方法中,文本被分成64位大小的文本块然后再进行加密。
比起最初的DES,3DES更为安全。
3DES(即TripleDES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的加密标准),是DES的一个更安全的变形。
它以DES为基本模块,通过组合分组方法设计出分组加密算法,其具体实现如下:
设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明文,C代表密文,
这样,
3DES加密过程为:
C=Ek3(Dk2(Ek1(P)))
3DES解密过程为:
P=Dk1((EK2(Dk3(C)))
Java代码
103importjava.security.InvalidKeyException;
104importjava.security.NoSuchAlgorithmException;
105importjava.security.Security;
106
107importjavax.crypto.BadPaddingException;
108importjavax.crypto.Cipher;
109importjavax.crypto.IllegalBlockSizeException;
110importjavax.crypto.KeyGenerator;
111importjavax.crypto.NoSuchPaddingException;
112importjavax.crypto.SecretKey;
113
114publicclassEncrypDES3{
115
116//KeyGenerator提供对称密钥生成器的功能,支持各种算法
117privateKeyGeneratorkeygen;
118//SecretKey负责保存对称密钥
119privateSecretKeydeskey;
120//Cipher负责完成加密或解密工作
121privateCipherc;
122//该字节数组负责保存加密的结果
123privatebyte[]cipherByte;
124
125publicEncrypDES3()throwsNoSuchAlgorithmException,NoSuchPaddingException{
126Security.addProvider(newcom.sun.crypto.provider.SunJCE());
127//实例化支持DES算法的密钥生成器(算法名称命名需按规定,否则抛出异常)
128keygen=KeyGenerator.getInstance("DESede");
129//生成密钥
130deskey=keygen.generateKey();
131//生成Cipher对象,指定其支持的DES算法
132c=Cipher.getInstance("DESede");
133}
134
135/**
136*对字符串加密
137*
138*@paramstr
139*@return
140*@throwsInvalidKeyException
141*@throwsIllegalBlockSizeException
142*@throwsBadPaddingException
143*/
144publicbyte[]Encrytor(Stringstr)throwsInvalidKeyException,
145IllegalBlockSizeException,BadPaddingException{
146//根据密钥,对Cipher对象进行初始化,ENCRYPT_MODE表示加密模式
147c.init(Cipher.ENCRYPT_MODE,deskey);
148byte[]src=str.getBytes();
149//加密,结果保存进cipherByte
150cipherByte=c.doFinal(src);
151returncipherByte;
152}
153
154/**
155*对字符串解密
156*
157*@parambuff
158*@return
159*@throwsInvalidKeyException
160*@throwsIllegalBlockSizeException
161*@throwsBadPaddingException
162*/
163publicbyte[]Decryptor(byte[]buff)throwsInvalidKeyException,
164IllegalBlockSizeException,BadPaddingException{
165//根据密钥,对Cipher对象进行初始化,DECRYPT_MODE表示加密模式
166c.init(Cipher.DECRYPT_MODE,deskey);
167cipherByte=c.doFinal(buff);
168returncipherByte;
169}
170
171/**
172*@paramargs
173*@throwsNoSuchPaddingException
174*@throwsNoSuchAlgorithmException
175*@throwsBadPaddingException
176*@throwsIllegalBlockSizeException
177*@throwsInvalidKeyException
178*/
179publicstaticvoidmain(String[]args)throwsException{
180EncrypDES3des=newEncrypDES3();
181Stringmsg="郭XX-搞笑相声全集";
182byte[]encontent=des.Encrytor(msg);
183byte[]decontent=des.Decryptor(encontent);
184System.out.println("明文是:
"+msg);
185System.out.println("加密后:
"+newString(encontent));
186System.out.println("解密后:
"+newString(decontent));
187
188}
189
190}
3.AES密码学中的高级加密标准(AdvancedEncryptionStandard,AES),又称高级加密标准
Rijndael加密法,是美国联邦政府采用的一种区块加密标准。
这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。
经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPSPUB197,并在2002年5月26日成为有效的标准。
2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
该算法为比利时密码学家JoanDaemen和VincentRijmen所设计,结合两位作者的名字,以Rijndael之命名之,投稿高级加密标准的甄选流程。
(Rijdael的发音近于"Rhinedoll"。
)
Java代码
191importjava.security.InvalidKeyException;
192importjava.security.NoSuchAlgorithmException;
193importjava.security.Security;
194
195importjavax.crypto.BadPaddingException;
196importjavax.crypto.Cipher;
197importjavax.crypto.IllegalBlockSizeException;
198importjavax.crypto.KeyGenerator;
199importjavax.crypto.NoSuchPaddingException;
200importjavax.crypto.SecretKey;
201
202publicclassEncrypAES{
203
204//KeyGenerator提供对称密钥生成器的功能,支持各种算法
205privateKeyGeneratorkeygen;
206//SecretKey负责保存对称密钥
207privateSecretKeydeskey;
208//Cipher负责完成加密或解密工作
209privateCipherc;
210//该字节数组负责保存加密的结果
211privatebyte[]cipherByte;
212
213publicEncrypAES()throwsNoSuchAlgorithmException,NoSuchPaddingException{
214Security.addProvider(newcom.sun.crypto.provider.SunJCE());
215//实例化支持DES算法的密钥生成器(算法名称命名需按规定,否则抛出异常)
216keygen=KeyGenerator.getInstance("AES");
217//生成密钥
218deskey=keygen.generateKey();
219//生成Cipher对象,指定其支持的DES算法
220c=Cipher.getInstance("AES");
221}
222
223/**
224*对字符串加密
225*
226*@paramstr
227*@return
228*@throwsInvalidKeyException
229*@throwsIllegalBlockSizeException
230*@throwsBadPaddingException
231*/
232publicbyte[]Encrytor(Stringstr)throwsInvalidKeyException,
233IllegalBlockSizeException,BadPaddingException{
234//根据密钥,对Cipher对象进行初始化,ENCRYPT_MODE表示加密模式
235c.init(Cipher.ENCRYPT_MODE,deskey);
236byte[]src=str.getBytes();
237//加密,结果保存进cipherByte
238cipherByte=c.doFinal(src);
239returncipherByte;
240}
241
242/**
243*对字符串解密
244*
245*@parambuff
246*@return
247*@throwsInvalidKeyException
248*@throwsIllegalBlockSizeException
249*@throwsBadPaddingException
250*/
251publicbyte[]Decryptor(byte[]buff)throwsInvalidKeyException,
252IllegalBlockSizeException,BadPaddingException{
253//根据密钥,对Cipher对象进行初始化,DECRYPT_MODE表示加密模式
254c.init(Cipher.DECRYPT_MODE,deskey);
255cipherByte=c.doFinal(buff);
256returncipherByte;
257}
258
259/**
260*@paramargs
261*@throwsNoSuchPaddingExceptio