- 浏览: 1048297 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1441)
- 软件思想&演讲 (9)
- 行业常识 (250)
- 时时疑问 (5)
- java/guava/python/php/ruby/R/scala/groovy (213)
- struct/spring/springmvc (37)
- mybatis/hibernate/JPA (10)
- mysql/oracle/sqlserver/db2/mongdb/redis/neo4j/GreenPlum/Teradata/hsqldb/Derby/sakila (268)
- js/jquery/jqueryUi/jqueryEaseyUI/extjs/angulrJs/react/es6/grunt/zepto/raphael (81)
- ZMQ/RabbitMQ/ActiveMQ/JMS/kafka (17)
- lucene/solr/nuth/elasticsearch/MG4J (167)
- html/css/ionic/nodejs/bootstrap (19)
- Linux/shell/centos (56)
- cvs/svn/git/sourceTree/gradle/ant/maven/mantis/docker/Kubernetes (26)
- sonatype nexus (1)
- tomcat/jetty/netty/jboss (9)
- 工具 (17)
- ETL/SPASS/MATLAB/RapidMiner/weka/kettle/DataX/Kylin (11)
- hadoop/spark/Hbase/Hive/pig/Zookeeper/HAWQ/cloudera/Impala/Oozie (190)
- ios/swift/android (9)
- 机器学习&算法&大数据 (18)
- Mesos是Apache下的开源分布式资源管理框架 (1)
- echarts/d3/highCharts/tableau (1)
- 行业技能图谱 (1)
- 大数据可视化 (2)
- tornado/ansible/twisted (2)
- Nagios/Cacti/Zabbix (0)
- eclipse/intellijIDEA/webstorm (5)
- cvs/svn/git/sourceTree/gradle/jira/bitbucket (4)
- jsp/jsf/flex/ZKoss (0)
- 测试技术 (2)
- splunk/flunm (2)
- 高并发/大数据量 (1)
- freemarker/vector/thymeleaf (1)
- docker/Kubernetes (2)
- dubbo/ESB/dubboX/wso2 (2)
最新评论
一、概述
Diffie-Hellman算法(D-H算法),密钥一致协议。是由公开密钥密码体制的奠基人Diffie和Hellman所提出的一种思想。简单的说就是允许两名用户在公开媒体上交换信息以生成"一致"的、可以共享的密钥。即就是由甲方产出一对密钥(公钥、私钥),乙方依照甲方公钥产生乙方密钥对(公钥、私钥)。以此为基线,作为数据传输保密基础,同时双方使用同一种对称加密算法构建本地密钥(SecretKey)对数据加密。这样,在互通了本地密钥(SecretKey)算法后,甲乙双方公开自己的公钥,使用对方的公钥和刚才产生的私钥加密数据,同时可以使用对方的公钥和自己的私钥对数据解密。
二、模型分析
1.甲方构建密钥对儿,将公钥公布给乙方,将私钥保留;双方约定数据加密算法;乙方通过甲方公钥构建密钥对儿,将公钥公布给甲方,将私钥保留。
2.甲方使用私钥、乙方公钥、约定数据加密算法构建本地密钥,然后通过本地密钥加密数据,发送给乙方加密后的数据;乙方使用私钥、甲方公钥、约定数据加密算法构建本地密钥,然后通过本地密钥对数据解密。
3.乙方使用私钥、甲方公钥、约定数据加密算法构建本地密钥,然后通过本地密钥加密数据,发送给甲方加密后的数据;甲方使用私钥、乙方公钥、约定数据加密算法构建本地密钥,然后通过本地密钥对数据解密。
实例:
Java代码 复制代码 收藏代码
1.package cn.tzz.java.crypto.dh;
2.
3.import java.io.IOException;
4.import java.security.Key;
5.import java.security.KeyFactory;
6.import java.security.KeyPair;
7.import java.security.KeyPairGenerator;
8.import java.security.PublicKey;
9.import java.security.spec.PKCS8EncodedKeySpec;
10.import java.security.spec.X509EncodedKeySpec;
11.import java.util.HashMap;
12.import java.util.Map;
13.
14.import javax.crypto.Cipher;
15.import javax.crypto.KeyAgreement;
16.import javax.crypto.SecretKey;
17.import javax.crypto.interfaces.DHPrivateKey;
18.import javax.crypto.interfaces.DHPublicKey;
19.import javax.crypto.spec.DHParameterSpec;
20.import sun.misc.BASE64Decoder;
21.import sun.misc.BASE64Encoder;
22.import org.junit.Test;
23.
24.
25.public class DHUtil {
26.
27. public static final String ALGORITHM = "DH";
28. /**默认密钥字节数*/
29. private static final int KEY_SIZE = 1024;
30.
31. /** DH加密下需要一种对称加密算法对数据加密,这里我们使用DES,也可以使用其他对称加密算法*/
32. public static final String SECRET_ALGORITHM = "DES";
33. private static final String PUBLIC_KEY = "DHPublicKey";//公钥
34. private static final String PRIVATE_KEY = "DHPrivateKey";//私钥
35.
36. public String encryptBASE64(byte[] key) {
37. return (new BASE64Encoder()).encodeBuffer(key);
38. }
39.
40. public byte[] decryptBASE64(String key) throws IOException {
41. return new BASE64Decoder().decodeBuffer(key);
42. }
43.
44. /** 初始化甲方密钥 */
45. public Map<String, Object> initKey() throws Exception {
46. KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(ALGORITHM);
47. keyPairGenerator.initialize(KEY_SIZE);
48. KeyPair keyPair = keyPairGenerator.generateKeyPair();
49. // 甲方公钥
50. DHPublicKey publicKey = (DHPublicKey) keyPair.getPublic();
51. // 甲方私钥
52. DHPrivateKey privateKey = (DHPrivateKey) keyPair.getPrivate();
53. Map<String, Object> keyMap = new HashMap<String, Object>(2);
54. keyMap.put(PUBLIC_KEY, publicKey);
55. keyMap.put(PRIVATE_KEY, privateKey);
56. return keyMap;
57. }
58.
59. /**初始化乙方密钥*/
60. public Map<String, Object> initKey(String key) throws Exception {
61. // 解析甲方公钥
62. byte[] keyBytes = decryptBASE64(key);
63. X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
64. KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);
65. PublicKey pubKey = keyFactory.generatePublic(x509KeySpec);
66. // 由甲方公钥构建乙方密钥
67. DHParameterSpec dhParamSpec = ((DHPublicKey) pubKey).getParams();
68. KeyPairGenerator keyPairGenerator = KeyPairGenerator
69. .getInstance(keyFactory.getAlgorithm());
70. keyPairGenerator.initialize(dhParamSpec);
71. KeyPair keyPair = keyPairGenerator.generateKeyPair();
72. // 乙方公钥
73. DHPublicKey publicKey = (DHPublicKey) keyPair.getPublic();
74. // 乙方私钥
75. DHPrivateKey privateKey = (DHPrivateKey) keyPair.getPrivate();
76. Map<String, Object> keyMap = new HashMap<String, Object>(2);
77. keyMap.put(PUBLIC_KEY, publicKey);
78. keyMap.put(PRIVATE_KEY, privateKey);
79.
80. return keyMap;
81. }
82.
83. /**
84. * 加密<br>
85. *
86. * @param data
87. * 待加密数据
88. * @param publicKey
89. * 甲方公钥
90. * @param privateKey
91. * 乙方私钥
92. * @return
93. * @throws Exception
94. */
95. public byte[] encrypt(byte[] data, String publicKey, String privateKey) throws Exception {
96. // 生成本地密钥
97. SecretKey secretKey = getSecretKey(publicKey, privateKey);
98. // 数据加密
99. Cipher cipher = Cipher.getInstance(secretKey.getAlgorithm());
100. cipher.init(Cipher.ENCRYPT_MODE, secretKey);
101. return cipher.doFinal(data);
102. }
103.
104. /**
105. * 解密<br>
106. *
107. * @param data
108. * 待解密数据
109. * @param publicKey
110. * 乙方公钥
111. * @param privateKey
112. * 乙方私钥
113. * @return
114. * @throws Exception
115. */
116. public byte[] decrypt(byte[] data, String publicKey, String privateKey) throws Exception {
117. // 生成本地密钥
118. SecretKey secretKey = getSecretKey(publicKey, privateKey);
119. // 数据解密
120. Cipher cipher = Cipher.getInstance(secretKey.getAlgorithm());
121. cipher.init(Cipher.DECRYPT_MODE, secretKey);
122. return cipher.doFinal(data);
123. }
124.
125. /**构建密钥*/
126. private SecretKey getSecretKey(String publicKey, String privateKey) throws Exception {
127. // 初始化公钥
128. byte[] pubKeyBytes = decryptBASE64(publicKey);
129. KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);
130. X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(pubKeyBytes);
131. PublicKey pubKey = keyFactory.generatePublic(x509KeySpec);
132.
133. // 初始化私钥
134. byte[] priKeyBytes = decryptBASE64(privateKey);
135.
136. PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(priKeyBytes);
137. Key priKey = keyFactory.generatePrivate(pkcs8KeySpec);
138.
139. KeyAgreement keyAgree = KeyAgreement.getInstance(keyFactory
140. .getAlgorithm());
141. keyAgree.init(priKey);
142. keyAgree.doPhase(pubKey, true);
143.
144. // 生成本地密钥
145. SecretKey secretKey = keyAgree.generateSecret(SECRET_ALGORITHM);
146. return secretKey;
147. }
148.
149. /** 取得私钥*/
150. public String getPrivateKey(Map<String, Object> keyMap) throws Exception {
151. Key key = (Key) keyMap.get(PRIVATE_KEY);
152. return encryptBASE64(key.getEncoded());
153. }
154.
155. /**取得公钥*/
156. public String getPublicKey(Map<String, Object> keyMap) throws Exception {
157. Key key = (Key) keyMap.get(PUBLIC_KEY);
158. return encryptBASE64(key.getEncoded());
159. }
160.
161. @Test
162. public void testDH() throws Exception {
163. // 生成甲方密钥对儿
164. Map<String, Object> aKeyMap = initKey();
165. String aPublicKey = getPublicKey(aKeyMap);
166. String aPrivateKey = getPrivateKey(aKeyMap);
167. System.out.println("甲方公钥:\r" + aPublicKey);
168. System.out.println("甲方私钥:\r" + aPrivateKey);
169.
170. // 由甲方公钥产生本地密钥对儿
171. Map<String, Object> bKeyMap = initKey(aPublicKey);
172. String bPublicKey = getPublicKey(bKeyMap);
173. String bPrivateKey = getPrivateKey(bKeyMap);
174. System.out.println("乙方公钥:\r" + bPublicKey);
175. System.out.println("乙方私钥:\r" + bPrivateKey);
176.
177. String aInput = "abcdef ";
178. System.out.println("原文: " + aInput);
179.
180. // 由甲方公钥,乙方私钥构建密文
181. byte[] aCode = encrypt(aInput.getBytes(), aPublicKey, bPrivateKey);
182.
183. // 由乙方公钥,甲方私钥解密
184. byte[] aDecode = decrypt(aCode, bPublicKey, aPrivateKey);
185. String aOutput = (new String(aDecode));
186. System.out.println("解密: " + aOutput);
187.
188. /**反过来加密解密*/
189. String bInput = "123456 ";
190. System.out.println("原文: " + bInput);
191.
192. // 由乙方公钥,甲方私钥构建密文
193. byte[] bCode = encrypt(bInput.getBytes(), bPublicKey, aPrivateKey);
194.
195. // 由甲方公钥,乙方私钥解密
196. byte[] bDecode = decrypt(bCode, aPublicKey, bPrivateKey);
197. String bOutput = (new String(bDecode));
198. System.out.println("解密: " + bOutput);
199. }
200.
201.}
Diffie-Hellman算法(D-H算法),密钥一致协议。是由公开密钥密码体制的奠基人Diffie和Hellman所提出的一种思想。简单的说就是允许两名用户在公开媒体上交换信息以生成"一致"的、可以共享的密钥。即就是由甲方产出一对密钥(公钥、私钥),乙方依照甲方公钥产生乙方密钥对(公钥、私钥)。以此为基线,作为数据传输保密基础,同时双方使用同一种对称加密算法构建本地密钥(SecretKey)对数据加密。这样,在互通了本地密钥(SecretKey)算法后,甲乙双方公开自己的公钥,使用对方的公钥和刚才产生的私钥加密数据,同时可以使用对方的公钥和自己的私钥对数据解密。
二、模型分析
1.甲方构建密钥对儿,将公钥公布给乙方,将私钥保留;双方约定数据加密算法;乙方通过甲方公钥构建密钥对儿,将公钥公布给甲方,将私钥保留。
2.甲方使用私钥、乙方公钥、约定数据加密算法构建本地密钥,然后通过本地密钥加密数据,发送给乙方加密后的数据;乙方使用私钥、甲方公钥、约定数据加密算法构建本地密钥,然后通过本地密钥对数据解密。
3.乙方使用私钥、甲方公钥、约定数据加密算法构建本地密钥,然后通过本地密钥加密数据,发送给甲方加密后的数据;甲方使用私钥、乙方公钥、约定数据加密算法构建本地密钥,然后通过本地密钥对数据解密。
实例:
Java代码 复制代码 收藏代码
1.package cn.tzz.java.crypto.dh;
2.
3.import java.io.IOException;
4.import java.security.Key;
5.import java.security.KeyFactory;
6.import java.security.KeyPair;
7.import java.security.KeyPairGenerator;
8.import java.security.PublicKey;
9.import java.security.spec.PKCS8EncodedKeySpec;
10.import java.security.spec.X509EncodedKeySpec;
11.import java.util.HashMap;
12.import java.util.Map;
13.
14.import javax.crypto.Cipher;
15.import javax.crypto.KeyAgreement;
16.import javax.crypto.SecretKey;
17.import javax.crypto.interfaces.DHPrivateKey;
18.import javax.crypto.interfaces.DHPublicKey;
19.import javax.crypto.spec.DHParameterSpec;
20.import sun.misc.BASE64Decoder;
21.import sun.misc.BASE64Encoder;
22.import org.junit.Test;
23.
24.
25.public class DHUtil {
26.
27. public static final String ALGORITHM = "DH";
28. /**默认密钥字节数*/
29. private static final int KEY_SIZE = 1024;
30.
31. /** DH加密下需要一种对称加密算法对数据加密,这里我们使用DES,也可以使用其他对称加密算法*/
32. public static final String SECRET_ALGORITHM = "DES";
33. private static final String PUBLIC_KEY = "DHPublicKey";//公钥
34. private static final String PRIVATE_KEY = "DHPrivateKey";//私钥
35.
36. public String encryptBASE64(byte[] key) {
37. return (new BASE64Encoder()).encodeBuffer(key);
38. }
39.
40. public byte[] decryptBASE64(String key) throws IOException {
41. return new BASE64Decoder().decodeBuffer(key);
42. }
43.
44. /** 初始化甲方密钥 */
45. public Map<String, Object> initKey() throws Exception {
46. KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(ALGORITHM);
47. keyPairGenerator.initialize(KEY_SIZE);
48. KeyPair keyPair = keyPairGenerator.generateKeyPair();
49. // 甲方公钥
50. DHPublicKey publicKey = (DHPublicKey) keyPair.getPublic();
51. // 甲方私钥
52. DHPrivateKey privateKey = (DHPrivateKey) keyPair.getPrivate();
53. Map<String, Object> keyMap = new HashMap<String, Object>(2);
54. keyMap.put(PUBLIC_KEY, publicKey);
55. keyMap.put(PRIVATE_KEY, privateKey);
56. return keyMap;
57. }
58.
59. /**初始化乙方密钥*/
60. public Map<String, Object> initKey(String key) throws Exception {
61. // 解析甲方公钥
62. byte[] keyBytes = decryptBASE64(key);
63. X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
64. KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);
65. PublicKey pubKey = keyFactory.generatePublic(x509KeySpec);
66. // 由甲方公钥构建乙方密钥
67. DHParameterSpec dhParamSpec = ((DHPublicKey) pubKey).getParams();
68. KeyPairGenerator keyPairGenerator = KeyPairGenerator
69. .getInstance(keyFactory.getAlgorithm());
70. keyPairGenerator.initialize(dhParamSpec);
71. KeyPair keyPair = keyPairGenerator.generateKeyPair();
72. // 乙方公钥
73. DHPublicKey publicKey = (DHPublicKey) keyPair.getPublic();
74. // 乙方私钥
75. DHPrivateKey privateKey = (DHPrivateKey) keyPair.getPrivate();
76. Map<String, Object> keyMap = new HashMap<String, Object>(2);
77. keyMap.put(PUBLIC_KEY, publicKey);
78. keyMap.put(PRIVATE_KEY, privateKey);
79.
80. return keyMap;
81. }
82.
83. /**
84. * 加密<br>
85. *
86. * @param data
87. * 待加密数据
88. * @param publicKey
89. * 甲方公钥
90. * @param privateKey
91. * 乙方私钥
92. * @return
93. * @throws Exception
94. */
95. public byte[] encrypt(byte[] data, String publicKey, String privateKey) throws Exception {
96. // 生成本地密钥
97. SecretKey secretKey = getSecretKey(publicKey, privateKey);
98. // 数据加密
99. Cipher cipher = Cipher.getInstance(secretKey.getAlgorithm());
100. cipher.init(Cipher.ENCRYPT_MODE, secretKey);
101. return cipher.doFinal(data);
102. }
103.
104. /**
105. * 解密<br>
106. *
107. * @param data
108. * 待解密数据
109. * @param publicKey
110. * 乙方公钥
111. * @param privateKey
112. * 乙方私钥
113. * @return
114. * @throws Exception
115. */
116. public byte[] decrypt(byte[] data, String publicKey, String privateKey) throws Exception {
117. // 生成本地密钥
118. SecretKey secretKey = getSecretKey(publicKey, privateKey);
119. // 数据解密
120. Cipher cipher = Cipher.getInstance(secretKey.getAlgorithm());
121. cipher.init(Cipher.DECRYPT_MODE, secretKey);
122. return cipher.doFinal(data);
123. }
124.
125. /**构建密钥*/
126. private SecretKey getSecretKey(String publicKey, String privateKey) throws Exception {
127. // 初始化公钥
128. byte[] pubKeyBytes = decryptBASE64(publicKey);
129. KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);
130. X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(pubKeyBytes);
131. PublicKey pubKey = keyFactory.generatePublic(x509KeySpec);
132.
133. // 初始化私钥
134. byte[] priKeyBytes = decryptBASE64(privateKey);
135.
136. PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(priKeyBytes);
137. Key priKey = keyFactory.generatePrivate(pkcs8KeySpec);
138.
139. KeyAgreement keyAgree = KeyAgreement.getInstance(keyFactory
140. .getAlgorithm());
141. keyAgree.init(priKey);
142. keyAgree.doPhase(pubKey, true);
143.
144. // 生成本地密钥
145. SecretKey secretKey = keyAgree.generateSecret(SECRET_ALGORITHM);
146. return secretKey;
147. }
148.
149. /** 取得私钥*/
150. public String getPrivateKey(Map<String, Object> keyMap) throws Exception {
151. Key key = (Key) keyMap.get(PRIVATE_KEY);
152. return encryptBASE64(key.getEncoded());
153. }
154.
155. /**取得公钥*/
156. public String getPublicKey(Map<String, Object> keyMap) throws Exception {
157. Key key = (Key) keyMap.get(PUBLIC_KEY);
158. return encryptBASE64(key.getEncoded());
159. }
160.
161. @Test
162. public void testDH() throws Exception {
163. // 生成甲方密钥对儿
164. Map<String, Object> aKeyMap = initKey();
165. String aPublicKey = getPublicKey(aKeyMap);
166. String aPrivateKey = getPrivateKey(aKeyMap);
167. System.out.println("甲方公钥:\r" + aPublicKey);
168. System.out.println("甲方私钥:\r" + aPrivateKey);
169.
170. // 由甲方公钥产生本地密钥对儿
171. Map<String, Object> bKeyMap = initKey(aPublicKey);
172. String bPublicKey = getPublicKey(bKeyMap);
173. String bPrivateKey = getPrivateKey(bKeyMap);
174. System.out.println("乙方公钥:\r" + bPublicKey);
175. System.out.println("乙方私钥:\r" + bPrivateKey);
176.
177. String aInput = "abcdef ";
178. System.out.println("原文: " + aInput);
179.
180. // 由甲方公钥,乙方私钥构建密文
181. byte[] aCode = encrypt(aInput.getBytes(), aPublicKey, bPrivateKey);
182.
183. // 由乙方公钥,甲方私钥解密
184. byte[] aDecode = decrypt(aCode, bPublicKey, aPrivateKey);
185. String aOutput = (new String(aDecode));
186. System.out.println("解密: " + aOutput);
187.
188. /**反过来加密解密*/
189. String bInput = "123456 ";
190. System.out.println("原文: " + bInput);
191.
192. // 由乙方公钥,甲方私钥构建密文
193. byte[] bCode = encrypt(bInput.getBytes(), bPublicKey, aPrivateKey);
194.
195. // 由甲方公钥,乙方私钥解密
196. byte[] bDecode = decrypt(bCode, aPublicKey, bPrivateKey);
197. String bOutput = (new String(bDecode));
198. System.out.println("解密: " + bOutput);
199. }
200.
201.}
发表评论
-
20180222积累
2018-02-22 09:34 4781. mybatis如何通过接口查找对应的mapper. ... -
20180208积累
2018-02-08 10:28 465临时表与永久表相似,但临时表存储在 tempdb 中,当不 ... -
行业应用
2018-01-30 16:30 485git clone的时候用上面那个IP地址,下面栏中的不能 ... -
SQLite 数据库
2018-01-29 22:57 755android: SQLite创建数据 ... -
java里面获取map的key和value的方法
2018-02-01 11:29 2159获取map的key和value的方法分为两种形式: ma ... -
Eclipse中Maven WEB工程tomcat项目添加调试以及项目发布细节记录
2018-02-23 21:11 725一、建立一个maven WEB项目 1、file-&g ... -
错误:HttpServlet was not found on the Java
2018-02-23 21:12 382我们在用Eclipse进行Java web ... -
使用 java8 实现List到Array的转换
2018-02-23 21:13 2988开发中需要调用第三方的库,有些 API 的入参要求是 do ... -
Java8 利用Lambda处理List集合
2018-01-11 09:58 5630Java 8新增的Lambda表达式,我们可以很方便地并行操 ... -
java中string与json互相转化
2018-01-11 09:40 1076在Java中socket传输数据时,数据类型往往比较难选择。 ... -
JSON 数据格式
2018-01-11 09:37 474JSON(JavaScript Object Notatio ... -
java怎么读取json格式的数据
2018-01-11 09:46 1059java可以使用JSONObject和JSONArray来操作 ... -
Java8-如何将List转变为逗号分隔的字符串
2018-01-10 10:13 1988Converting a List to a String ... -
eclipse maven 打war包的两种方式
2018-02-23 21:25 703第一种:利用pom.xml文件打包。 右键pom.xml ... -
Annotation(三)——Spring注解开发
2018-02-28 09:21 428Spring框架的核心功能IoC(Inversion o ... -
Spring自定义注解
2018-02-28 09:32 594java注解:附在代码中的一些元信息,用于在编译、运行时起 ... -
Java项目
2018-01-08 10:56 0这两种解决办法已经能完全解决问题,不过值得注意的一点是,我 ... -
解决Eclipse建立Maven项目后无法建立src/main/java资源文件夹的办法
2018-03-22 10:41 1130在Eclipse中建立好一个Maven项目后,如果Java ... -
Java @override报错的解决方法
2018-01-07 12:56 0有时候Java的Eclipse工程换一台电脑后编译总是@ove ... -
Java 8 配置Maven-javadoc-plugin
2018-01-07 09:07 1040在升级JDK至1.8之后,使用Maven-javadoc- ...
相关推荐
这是本人总结的Java 非对称 加密 算法,有疑问可以找我1038546502@qq.com
一个来自Java非对称加密算法演示源码,通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后的公钥,将其解码,将公钥的KeySpec对象转换为公钥,张三用自己的私钥解密从李四处收到的信息,里面对原理的...
RSA算法是一种非对称加密算法,它在信息安全领域有着广泛的应用,特别是在数据传输中的安全保护。这个RAR压缩包包含了一个名为“Rsa.java”的源代码文件,可能是用于演示如何在Java环境中实现RSA算法。另一个文件...
非对称加密算法和数字签名是信息技术中两个关键...总之,非对称加密算法和数字签名是保障网络通信安全的重要工具,Java提供了丰富的库支持这些功能的实现。理解并熟练运用这些技术,对于开发安全的应用和系统至关重要。
java关于加密的算法demo代码(Base64加密\数字签名\对称加密算法\非对称加密算法\消息摘要算法) JAVA安全实现三种方式: 1.JDK 2.Commons Codec 3.Bouncy Castle 一。非对称加密算法: 1.DH 2.RSA 3.ELGamal 二。...
Java 非对称加密算法RSA实现详解 Java 非对称加密算法RSA实现详解是 Java 语言中的一种常用加密算法,主要用于保护数据的安全性。 RSA 算法是一种基于大数分解的加密算法,它的安全性取决于大数分解的难度。在 Java...
而非对称加密算法则采用了一对密钥,包括一个公钥和一个私钥。公钥可以公开给任何人,用于加密数据;而私钥必须保密,用于解密数据。这种设计使得即使公钥被他人获取,也无法解密由私钥加密的信息,极大地增强了通信...
Java 非对称加密算法 DH 实现详解 Java 非对称加密算法 DH 实现详解是一种基于 Diffie-Hellman 密钥交换算法的非对称加密算法实现。该算法实现了密钥交换、加密和解密的过程,主要用于保证数据的安全传输。 Diffie...
java rsa非对称加密算法3个实例源代码
"Java实现的对称加密算法AES定义与用法详解" 对称加密算法AES是当前使用最多的加密算法之一,其主要特点是高级的、安全的、快速的和灵活的。下面我们将详细介绍Java实现的对称加密算法AES的定义、特点、用法及使用...
Java非对称加密技术是一种基于数学算法的安全加密方式,它主要使用两个密钥:公钥和私钥。这种加密方式的核心在于,公钥可以公开给任何人,用于加密数据;而私钥必须保密,用于解密数据。这样,即使数据在传输过程中...
Java中常见的非对称加密算法包括RSA(Rivest-Shamir-Adleman)、DSA(Digital Signature Algorithm)和ECC(Elliptic Curve Cryptography)。RSA是一种广泛使用的非对称加密算法,它基于大素数分解的困难性,适用于...
常见的非对称加密算法有RSA、DSA和ECC等。 1. **生成秘钥文件**: 在Java中,我们可以使用`java.security.KeyPairGenerator`类来生成RSA或DSA等非对称密钥对。首先,需要指定加密算法,然后初始化密钥生成器并生成...
这个压缩包"基于Java的非对称加密源码实例.zip"显然包含了用于演示如何在Java中实现非对称加密算法的源代码。让我们深入探讨一下这个话题。 非对称加密的核心在于使用一对密钥:公钥和私钥。公钥可以公开给任何人,...
本资料包“对称加密算法分析及用Java实现.zip”包含了关于这一主题的详细内容,特别是如何使用Java编程语言来实现对称加密算法。 对称加密算法的核心特点是加密和解密使用相同的密钥,这简化了密钥管理,但也带来了...
4. **DH(Diffie-Hellman)**: Diffie-Hellman密钥交换协议,是一种非对称加密算法,用于在不安全的通道上安全地交换密钥。DHUtil.java可能包含DH密钥协商的相关方法。 5. **ECDSA(Elliptic Curve Digital ...
对称加密算法包括了多种算法,本文主要介绍DES、3DES和AES这三种常见的对称加密算法,并对它们进行Java实现的总结。 首先,对称加密算法的一个关键优势在于其算法公开、计算量小、加密速度快、加密效率高,但它们也...