- 浏览: 3430742 次
- 性别:
- 来自: 珠海
文章分类
- 全部博客 (1633)
- Java (250)
- Android&HTML5 (111)
- Struts (10)
- Spring (236)
- Hibernate&MyBatis (115)
- SSH (49)
- jQuery插件收集 (55)
- Javascript (145)
- PHP (77)
- REST&WebService (18)
- BIRT (27)
- .NET (7)
- Database (105)
- 设计模式 (16)
- 自动化和测试 (19)
- Maven&Ant (43)
- 工作流 (36)
- 开源应用 (156)
- 其他 (16)
- 前台&美工 (119)
- 工作积累 (0)
- OS&Docker (83)
- Python&爬虫 (28)
- 工具软件 (157)
- 问题收集 (61)
- OFbiz (6)
- noSQL (12)
最新评论
-
HEZR曾嶸:
你好博主,这个不是很理解,能解释一下嘛//左边+1,上边+1, ...
java 两字符串相似度计算算法 -
天使建站:
写得不错,可以看这里,和这里的这篇文章一起看,有 ...
jquery 遍历对象、数组、集合 -
xue88ming:
很有用,谢谢
@PathVariable映射出现错误: Name for argument type -
jnjeC:
厉害,困扰了我很久
MyBatis排序时使用order by 动态参数时需要注意,用$而不是# -
TopLongMan:
非常好,很实用啊。。
PostgreSQL递归查询实现树状结构查询
RSA算法原理(一)http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html
RSA算法原理(二)http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html
1976年,两位美国计算机学家Whitfield Diffie 和 Martin Hellman,提出了一种崭新构思,可以在不直接传递密钥的情况下,完成解密。这被称为"Diffie-Hellman密钥交换算法"。这个算法启发了其他科学家。人们认识到,加密和解密可以使用不同的规则,只要这两种规则之间存在某种对应关系即可,这样就避免了直接传递密钥。
这种新的加密模式被称为"非对称加密算法"。
(1)乙方生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的。
(2)甲方获取乙方的公钥,然后用它对信息加密。
(3)乙方得到加密后的信息,用私钥解密。
如果公钥加密的信息只有私钥解得开,那么只要私钥不泄漏,通信就是安全的。
产生公钥和私钥,公钥拿给别人加密,加密后,用自己的私钥才能解密。
原文: http://my.oschina.net/dyyweb/blog/657861
Diffie- Hellman算法(D-H算法),密钥一致协议。 * 是由公开密钥密码体制的奠基人Diffie和Hellman所提出的一种思想。 * 简单的说就是允许两名用 户在公开媒体上交换信息以生成"一致"的、可以共享的密钥。 * 换句话说,就是由甲方产出一对密钥(公钥、私钥),乙方依照甲方公钥产生乙方密钥对(公钥、私 钥)。 * 以此为基线,作为数据传输保密基础,同时双方使用同一种对称加密算法构建本地密钥(SecretKey)对数据加密。 * 这样,在互通了本地密钥 (SecretKey)算法后,甲乙双方公开自己的公钥,使用对方的公钥和刚才产生的私钥加密数据,
非对称加密DH算法 DH代码实现
RSA算法原理(二)http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html
1976年,两位美国计算机学家Whitfield Diffie 和 Martin Hellman,提出了一种崭新构思,可以在不直接传递密钥的情况下,完成解密。这被称为"Diffie-Hellman密钥交换算法"。这个算法启发了其他科学家。人们认识到,加密和解密可以使用不同的规则,只要这两种规则之间存在某种对应关系即可,这样就避免了直接传递密钥。
这种新的加密模式被称为"非对称加密算法"。
(1)乙方生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的。
(2)甲方获取乙方的公钥,然后用它对信息加密。
(3)乙方得到加密后的信息,用私钥解密。
如果公钥加密的信息只有私钥解得开,那么只要私钥不泄漏,通信就是安全的。
产生公钥和私钥,公钥拿给别人加密,加密后,用自己的私钥才能解密。
原文: http://my.oschina.net/dyyweb/blog/657861
Diffie- Hellman算法(D-H算法),密钥一致协议。 * 是由公开密钥密码体制的奠基人Diffie和Hellman所提出的一种思想。 * 简单的说就是允许两名用 户在公开媒体上交换信息以生成"一致"的、可以共享的密钥。 * 换句话说,就是由甲方产出一对密钥(公钥、私钥),乙方依照甲方公钥产生乙方密钥对(公钥、私 钥)。 * 以此为基线,作为数据传输保密基础,同时双方使用同一种对称加密算法构建本地密钥(SecretKey)对数据加密。 * 这样,在互通了本地密钥 (SecretKey)算法后,甲乙双方公开自己的公钥,使用对方的公钥和刚才产生的私钥加密数据,
非对称加密DH算法 DH代码实现
package com.dy.encryption.asymmetric; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import javax.crypto.Cipher; import javax.crypto.KeyAgreement; import javax.crypto.SecretKey; import javax.crypto.interfaces.DHPrivateKey; import javax.crypto.interfaces.DHPublicKey; import javax.crypto.spec.DHParameterSpec; import java.security.*; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import java.util.HashMap; import java.util.Map; /** * 想了解更多的加密,解密算法和数字签名实现,请游览本人博客 * Diffie- Hellman算法(D-H算法),密钥一致协议。 * 是由公开密钥密码体制的奠基人Diffie和Hellman所提出的一种思想。 * 简单的说就是允许两名用 户在公开媒体上交换信息以生成"一致"的、可以共享的密钥。 * 换句话说,就是由甲方产出一对密钥(公钥、私钥),乙方依照甲方公钥产生乙方密钥对(公钥、私 钥)。 * 以此为基线,作为数据传输保密基础,同时双方使用同一种对称加密算法构建本地密钥(SecretKey)对数据加密。 * 这样,在互通了本地密钥 (SecretKey)算法后,甲乙双方公开自己的公钥,使用对方的公钥和刚才产生的私钥加密数据, * 同时可以使用对方的公钥和自己的私钥对数据解密。 * 不单 单是甲乙双方两方,可以扩展为多方共享数据通讯,这样就完成了网络交互数据的安全通讯!该算法源于中国的同余定理——中国馀数定理。 流程分析: 1.甲方构建密钥对儿,将公钥公布给乙方,将私钥保留;双方约定数据加密算法;乙方通过甲方公钥构建密钥对儿,将公钥公布给甲方,将私钥保留。 2.甲方使用私钥、乙方公钥、约定数据加密算法构建本地密钥,然后通过本地密钥加密数据,发送给乙方加密后的数据; 乙方使用私钥、甲方公钥、约定数据加密算法构建本地密钥,然后通过本地密钥对数据解密。 3.乙方使用私钥、甲方公钥、约定数据加密算法构建本地密钥,然后通过本地密钥加密数据,发送给甲方加密后的数据; 甲方使用私钥、乙方公钥、约定数据加密算法构建本地密钥,然后通过本地密钥对数据解密。 */ public class DHdemo { public static final String ALGORITHM = "DH"; /** * 默认密钥字节数 * * <pre> * DH * Default Keysize 1024 * Keysize must be a multiple of 64, ranging from 512 to 1024 (inclusive). * </pre> */ private static final int KEY_SIZE = 1024; /** * DH加密下需要一种对称加密算法对数据加密,这里我们使用DES,也可以使用其他对称加密算法。 */ public static final String SECRET_ALGORITHM = "DES"; private static final String PUBLIC_KEY = "DHPublicKey"; private static final String PRIVATE_KEY = "DHPrivateKey"; /** * 初始化甲方密钥 * * @return * @throws Exception */ public static Map<String, Object> initKey() throws Exception { KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(ALGORITHM); keyPairGenerator.initialize(KEY_SIZE); KeyPair keyPair = keyPairGenerator.generateKeyPair(); // 甲方公钥 DHPublicKey publicKey = (DHPublicKey) keyPair.getPublic(); // 甲方私钥 DHPrivateKey privateKey = (DHPrivateKey) keyPair.getPrivate(); Map<String, Object> keyMap = new HashMap<String, Object>(2); keyMap.put(PUBLIC_KEY, publicKey); keyMap.put(PRIVATE_KEY, privateKey); return keyMap; } /** * 初始化乙方密钥 * * @param key 甲方公钥 * @return * @throws Exception */ public static Map<String, Object> initKey(String key) throws Exception { // 解析甲方公钥 byte[] keyBytes = new BASE64Decoder().decodeBuffer(key); X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM); PublicKey pubKey = keyFactory.generatePublic(x509KeySpec); // 由甲方公钥构建乙方密钥 DHParameterSpec dhParamSpec = ((DHPublicKey) pubKey).getParams(); KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(keyFactory.getAlgorithm()); keyPairGenerator.initialize(dhParamSpec); KeyPair keyPair = keyPairGenerator.generateKeyPair(); // 乙方公钥 DHPublicKey publicKey = (DHPublicKey) keyPair.getPublic(); // 乙方私钥 DHPrivateKey privateKey = (DHPrivateKey) keyPair.getPrivate(); Map<String, Object> keyMap = new HashMap<String, Object>(2); keyMap.put(PUBLIC_KEY, publicKey); keyMap.put(PRIVATE_KEY, privateKey); return keyMap; } /** * 加密<br> * * @param data * 待加密数据 * @param publicKey * 甲方公钥 * @param privateKey * 乙方私钥 * @return * @throws Exception */ public static String encrypt(String data, String publicKey, String privateKey) throws Exception { // 生成本地密钥 SecretKey secretKey = getSecretKey(publicKey, privateKey); // 数据加密 Cipher cipher = Cipher.getInstance(secretKey.getAlgorithm()); cipher.init(Cipher.ENCRYPT_MODE, secretKey); return new BASE64Encoder().encode(cipher.doFinal(data.getBytes("UTF-8"))); } /** * 解密<br> * * @param data * 待解密数据 * @param publicKey * 乙方公钥 * @param privateKey * 乙方私钥 * @return * @throws Exception */ public static String decrypt(String data, String publicKey, String privateKey) throws Exception { // 生成本地密钥 SecretKey secretKey = getSecretKey(publicKey, privateKey); // 数据解密 Cipher cipher = Cipher.getInstance(secretKey.getAlgorithm()); cipher.init(Cipher.DECRYPT_MODE, secretKey); byte[] decode_data = new BASE64Decoder().decodeBuffer(data); return new String(cipher.doFinal(decode_data)); } /** * 构建密钥 * * @param publicKey * 公钥 * @param privateKey * 私钥 * @return * @throws Exception */ private static SecretKey getSecretKey(String publicKey, String privateKey) throws Exception { // 初始化公钥 byte[] pubKeyBytes = new BASE64Decoder().decodeBuffer(publicKey); KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM); X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(pubKeyBytes); PublicKey pubKey = keyFactory.generatePublic(x509KeySpec); // 初始化私钥 byte[] priKeyBytes = new BASE64Decoder().decodeBuffer(privateKey); PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(priKeyBytes); Key priKey = keyFactory.generatePrivate(pkcs8KeySpec); KeyAgreement keyAgree = KeyAgreement.getInstance(keyFactory.getAlgorithm()); keyAgree.init(priKey); keyAgree.doPhase(pubKey, true); // 生成本地密钥 SecretKey secretKey = keyAgree.generateSecret(SECRET_ALGORITHM); return secretKey; } /** * 取得私钥 * * @param keyMap * @return * @throws Exception */ public static String getPrivateKey(Map<String, Object> keyMap) throws Exception { Key key = (Key) keyMap.get(PRIVATE_KEY); return new BASE64Encoder().encode(key.getEncoded()); } /** * 取得公钥 * * @param keyMap * @return * @throws Exception */ public static String getPublicKey(Map<String, Object> keyMap) throws Exception { Key key = (Key) keyMap.get(PUBLIC_KEY); return new BASE64Encoder().encode(key.getEncoded()); } public static void main(String[] args) throws Exception{ // 生成甲方密钥对儿 Map<String, Object> aKeyMap = DHdemo.initKey(); String aPublicKey = DHdemo.getPublicKey(aKeyMap); String aPrivateKey = DHdemo.getPrivateKey(aKeyMap); System.err.println("甲方公钥:" + aPublicKey); System.err.println("甲方私钥:" + aPrivateKey); // 由甲方公钥产生本地(乙方)密钥对儿 Map<String, Object> bKeyMap = DHdemo.initKey(aPublicKey); String bPublicKey = DHdemo.getPublicKey(bKeyMap); String bPrivateKey = DHdemo.getPrivateKey(bKeyMap); System.err.println("乙方公钥:" + bPublicKey); System.err.println("乙方私钥:" + bPrivateKey); String input = "DH算法测试"; System.out.println("原文: " + input); // 由甲方公钥,乙方私钥构建密文 String aCode = DHdemo.encrypt(input, aPublicKey, bPrivateKey); System.out.println("由甲方公钥,乙方私钥构建密文: " + aCode); // 由乙方公钥,甲方私钥解密 String aDecode = DHdemo.decrypt(aCode, bPublicKey, aPrivateKey); System.out.println("由乙方公钥,甲方私钥解密: " + aDecode); System.err.println(" ===============反过来加密解密================== "); // 由乙方公钥,甲方私钥构建密文 String bCode = DHdemo.encrypt(input, bPublicKey, aPrivateKey); System.out.println("由乙方公钥,甲方私钥构建密文: " + bCode); // 由甲方公钥,乙方私钥解密 String bDecode = DHdemo.decrypt(bCode, aPublicKey, bPrivateKey); System.out.println("由甲方公钥,乙方私钥解密: " + bDecode); /** * 如我代码证实,甲乙双方在获得对方公钥后可以对发送给对方的数据加密,同时也能对接收到的数据解密,达到了数据安全通信的目的! */ }
发表评论
-
Java Comparable和Comparator
2016-06-26 08:52 706http://my.oschina.net/android52 ... -
Java集合框架之fastutil & koloboke
2016-06-23 14:04 2480Java集合框架之fastutil http://rensan ... -
ehcache 分布式支持
2016-06-05 22:26 1103原文 http://my.oschina.net/glenxu ... -
Intellij IDEA插件开发入门
2016-05-26 11:42 2889原文: http://blog.csdn.net/dc_726 ... -
阿里巴巴Druid数据源的配置与使用
2016-05-24 17:42 1551http://my.oschina.net/wjme/blog ... -
mysql中间件研究(Atlas,cobar,TDDL), 分库分表插件
2016-05-09 14:15 3456http://www.guokr.com/blog/47576 ... -
Java集合: Queue和Deque
2016-05-09 09:49 1869Queue http://my.oschina.net/kev ... -
使用gzip优化web应用(filter实现)
2016-05-07 01:45 1034使用gzip优化web应用(filter实现) http:// ... -
Byteman 3.0.5 发布,Java 字节码注入工具
2016-04-23 10:29 1774Byteman 3.0.5 发布,Java 字 ... -
RandomStringUtils的说明和生成随机汉字
2016-04-20 15:21 1404更多参考: http://my.oschina.net/wil ... -
通过IP地址获取地理位置
2016-04-20 15:19 899http://my.oschina.net/githubhty ... -
Java编程中使用正则表达式过滤非数字字符串
2016-04-14 13:51 1725/** * * @param str ... -
企业支付宝账号开发接口教程
2016-03-31 14:52 1246企业支付宝账号开发接口教程--JAVA-UTF-8(实际操作- ... -
java double类型数据操作工具类
2016-03-28 17:36 1250http://my.oschina.net/yxwblog/b ... -
double转换到BigDecimal
2016-03-28 17:11 1554BigDecimal b = new BigDecimal(d ... -
Java 生成好看的验证码
2016-03-23 10:52 3370http://www.oschina.net/code/sni ... -
Linux环境安装配置Swftools
2016-03-22 21:01 1111http://tetop.blog.51cto.com/188 ... -
java压缩与解压缩文件
2016-03-20 22:03 1473http://www.oschina.net/code/sni ... -
java图像压缩
2016-03-19 23:20 957http://my.oschina.net/686991/bl ... -
会话状态保持,JSESSIONID,COOKIE,URL重写
2016-03-17 20:26 1769http://my.oschina.net/sniperLi/ ...
相关推荐
java关于加密的算法demo代码(Base64加密\数字签名\对称加密算法\非对称加密算法\消息摘要算法) JAVA安全实现三种方式: 1.JDK 2.Commons Codec 3.Bouncy Castle 一。非对称加密算法: 1.DH 2.RSA 3.ELGamal 二。...
Java 非对称加密算法 DH 实现详解 Java 非对称加密算法 DH 实现详解是一种基于 Diffie-Hellman 密钥交换算法的非对称加密算法实现。该算法实现了密钥交换、加密和解密的过程,主要用于保证数据的安全传输。 Diffie...
C++中可以使用如AES(Advanced Encryption Standard)这样的对称加密算法。 6. **C++编程**:编写C++代码时,需要考虑内存管理,确保正确释放分配的资源。此外,错误处理和输入验证也是必要的,以防止潜在的安全...
这个程序可以作为学习和理解DH协议工作原理的实用工具,帮助开发者更好地掌握非对称加密和密钥交换的概念。通过查看源代码,你可以了解到如何在实际编程中应用这些理论知识,以及如何与系统级别的加密库进行交互。
常见的非对称加密算法包括RSA、ECC(椭圆曲线加密)、DSA(数字签名算法)和DH(Diffie-Hellman密钥交换)等。这些算法在数学原理上各有差异,但都遵循着公钥和私钥的基本原则。例如,RSA基于大整数因子分解的难度,...
4. **DH(Diffie-Hellman)**: Diffie-Hellman密钥交换协议,是一种非对称加密算法,用于在不安全的通道上安全地交换密钥。DHUtil.java可能包含DH密钥协商的相关方法。 5. **ECDSA(Elliptic Curve Digital ...
由于提供的文件名只有"DH",我们可以假设这个压缩包包含的是C++源代码文件,可能命名为"DH.cpp"或"DH.h",其中包含了实现DH算法的函数和类定义。 总结,DH的加密与解密算法是网络安全中的重要概念,其C++实现涉及大...
接下来,非对称加密算法,如DH(Diffie-Hellman)和RSA,它们使用一对公钥和私钥。DH算法主要用于密钥交换,两方通过公开信息协商出一个共享密钥,而RSA则可用于加密和数字签名,私钥用于解密和签名,公钥用于加密和...
- **RSA**:由Ron Rivest、Adi Shamir和Leonard Adleman共同发明,是最常用的非对称加密算法之一。 - **DH**:Diffie-Hellman密钥交换协议,用于安全地交换加密密钥。 - **DSA**:数字签名算法,主要用于生成和验证...
本文介绍了使用 Java 中的 Diffie-Hellman(DH)算法实现非对称加密的实例,提供了完整的实现代码,供需要的朋友参考。 Diffie-Hellman 算法是一种经典的密钥交换协议,允许两个用户在不安全的通道上秘密地共享密钥...
1. **DH (Diffie-Hellman) 算法**:用于密钥交换,解决了对称加密中密钥分发的问题。 - **数学原理**:假设双方同意两个大的整数 \( a \) 和 \( b \),一方选择随机数 \( i \),计算 \( I=a^i \mod b \) 并发送给...
DH算法是一种非对称密钥交换协议,由Whitfield Diffie和Martin Hellman于1976年提出。它允许两个通信方在不共享任何秘密信息的情况下,通过公开通信协商出一个共享密钥。该算法基于数学难题——离散对数问题,其基本...
DH算法,全称为Diffie-Hellman密钥交换算法,是一种在不安全的通信信道上,让两个通信方安全地交换对称密钥的方法。...通过分析和理解这段代码,可以加深对DH算法工作原理的理解,并为实际项目中的安全通信提供参考。
文章重点阐述了对称加密、非对称加密和散列算法的原理和区别,以及它们的应用场景。同时,本文还介绍了常见的加解密算法,如DES、AES、DH、DSA等,并强调了散列算法在数据完整性校验中的应用。最后,本文还提供了...
2. DH(Diffie-Hellman):DH是一种非对称加密算法,用于密钥交换和加密。 3. DSA(Digital Signature Algorithm):DSA是一种数字签名算法,用于生成和验证数字签名。 4. ECC(Elliptic Curve Cryptography):...
Java编程实现非对称加密的方法...Java编程实现非对称加密的方法有很多, DH加密、RSA加密和ElGamal加密分别基于不同的数学理论方法。Java可以使用 KeyPairGenerator、KeyFactory 和 Cipher 等类来实现这些加密算法。
非对称加密算法家族包含了鼻祖DH算法,基于因子分解难题的RSA算法,基于离散对数难题的ElGamal算法和ECC算法等.在本人对接过的多家银行和第三方支付接口中,RSA算法是非对称加密中的网红花旦,今天就浅谈下RSA算法. 二....
这个密钥可以用于后续的加密通信,例如使用AES等对称加密算法进行数据加密。 DH算法的基本原理是基于数学中的大数因子分解难题。在数学上,对于两个大素数p和g,计算g的p次方模p的结果(即g^p mod p)相对容易,但...
这种共享密钥可用于对称加密算法,如AES,以高效地加密大量数据,因为对称加密通常比非对称加密更快。 在这个DH.rar文件中,很可能包含了实现这些过程的代码示例或教程,帮助用户理解如何在实际应用中结合RSA和DH来...