java 加密解密简单实现
加密算法有很多种:这里只大约列举几例:
1:消息摘要:(数字指纹):既对一个任意长度的一个数据块进行计算,产生一个唯一指纹。MD5/SHA1
发送给其他人你的信息和摘要,其他人用相同的加密方法得到摘要,最后进行比较摘要是否相同。
2:单匙密码体制:DES:比较简便高效,密钥简短,加解密速度快,破译极其困难,但其安全性依赖于密匙的安全性。
DES(Data Encryption Standard)是发明最早的最广泛使用的分组对称加密算法。DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密
发送给其他人你的信息和摘要,其他人用相同的加密方法得到摘要,最后进行比较摘要是否相同。
2:单匙密码体制:DES:比较简便高效,密钥简短,加解密速度快,破译极其困难,但其安全性依赖于密匙的安全性。
DES(Data Encryption Standard)是发明最早的最广泛使用的分组对称加密算法。DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密
3:数字签名:就是信息发送者用其私钥对从所传报文中提取出的特征数据(或称数字指纹)进行RSA算法操作,以保证发信人无法抵赖曾发过该信息(即不可抵赖性),同时也确保信息报文在经签名后末被篡改(即完整性)。当信息接收者收到报文后,就可以用发送者的公钥对数字签名进行验证。
代表:DSA
4:非对称密匙密码体制(公匙体系):加密密匙不同于解密密匙,加密密匙公之于众,谁都可以使用,解密密匙只有解密人自己知道。代表:RSA
代表:DSA
4:非对称密匙密码体制(公匙体系):加密密匙不同于解密密匙,加密密匙公之于众,谁都可以使用,解密密匙只有解密人自己知道。代表:RSA
下面是对上面几个例子进行的简单实现:
Java代码
1. package test;
2. import java.io.FileInputStream;
3. import java.io.FileOutputStream;
4. import java.io.IOException;
5. import java.io.ObjectInputStream;
6. import java.io.ObjectOutputStream;
7. import java.security.*;
8. import&pto.Cipher;
9. import&pto.KeyGenerator;
10. import&pto.SecretKey;
11. /**
12. * 加密解密
13. *
14. * @author shy.qiu
15. * @since blog.csdn/qiushyfm
16. */
17. public class CryptTest {
18. /**
19. * 进行MD5加密
20. *
21. * @param info
22. * 要加密的信息
23. * @return String 加密后的字符串
24. */
25. public String encryptToMD5(String info) {
26. byte[] digesta = null;
27. try {
28. // 得到一个md5的消息摘要
29. MessageDigest alga =&Instance("MD5");
30. // 添加要进行计算摘要的信息
31. alga.Bytes());
32. // 得到该摘要
33. digesta = alga.digest();
34. } catch (NoSuchAlgorithmException e) {
35. e.printStackTrace();
36. }
37. // 将摘要转为字符串
38. String rs = byte2hex(digesta);
39. java源代码加密 return rs;
40. }
41. /**
42. * 进行SHA加密
43. *
44. * @param info
45. * 要加密的信息
46. * @return String 加密后的字符串
47. */
48. public String encryptToSHA(String info) {
49. byte[] digesta = null;
50. try {
51. // 得到一个SHA-1的消息摘要
52. MessageDigest alga =&Instance("SHA-1");
53. // 添加要进行计算摘要的信息
54. alga.Bytes());
55. // 得到该摘要
56. digesta = alga.digest();
57. } catch (NoSuchAlgorithmException e) {
58. e.printStackTrace();
59. }
60. // 将摘要转为字符串
61. String rs = byte2hex(digesta);
62. return rs;
63. }
64. // //////////////////////////////////////////////////////////////////////////
65. /**
66. * 创建密匙
67. *
68. * @param algorithm
69. * 加密算法,可用 DES,DESede,Blowfish
70. * @return SecretKey 秘密(对称)密钥
71. */
72. public SecretKey createSecretKey(String algorithm) {
73. // 声明KeyGenerator对象
74. KeyGenerator keygen;
75. // 声明 密钥对象
76. SecretKey deskey = null;
77. try {
78. // 返回生成指定算法的秘密密钥的 KeyGenerator 对象
79. keygen =&Instance(algorithm);
80. // 生成一个密钥
81. deskey =&ateKey();
82. } catch (NoSuchAlgorithmException e) {
83. e.printStackTrace();
84. }
85. // 返回密匙
86. return deskey;
87. }
88. /**
89. * 根据密匙进行DES加密
90. *
91. * @param key
92. * 密匙
93. * @param info
94. * 要加密的信息
95. * @return String 加密后的信息
96. */
97. public String encryptToDES(SecretKey key, String info) {
98. // 定义 加密算法,可用 DES,DESede,Blowfish
99. String Algorithm = "DES";
100. // 加密随机数生成器 (RNG),(可以不写)
101. SecureRandom sr = new SecureRandom();
102. // 定义要生成的密文
103. byte[] cipherByte = null;
104. try {
105. // 得到加密/解密器
106. Cipher c1 =&Instance(Algorithm);
107. // 用指定的密钥和模式初始化Cipher对象
108. // 参数:(ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE,UNWRAP_MODE)
109. c1.init(Cipher.ENCRYPT_MODE, key, sr);
110. // 对要加密的内容进行编码处理,
111. cipherByte = c1.Bytes());
112. } catch (Exception e) {
113. e.printStackTrace();
114. }
115. // 返回密文的十六进制形式
116. return byte2hex(cipherByte);
117. }
118. /**
119. * 根据密匙进行DES解密
120. *
121. * @param key
122. * 密匙
123. * @param sInfo
124. * 要解密的密文
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论