- 浏览: 4399784 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (163)
- 职场 && 心情 (22)
- Java/Basic (17)
- Java/Compression (7)
- Java/Security (20)
- Java/Maven (3)
- Java/Cache (11)
- Eclipse (4)
- Spring (19)
- ORM/Hibernate (2)
- ORM/iBatis (3)
- DB/NoSQL (11)
- DB/MySQL (7)
- DB/MS SQL Server (4)
- OS/Linux (11)
- OS/Mac (7)
- C/C++ (4)
- Server Architecture/Basic (13)
- Server Architecture/Distributed (17)
- Moblie/Andriod (2)
- WebService (3)
- Objective-C (1)
- Html (1)
- 设计模式 (1)
- Scala (0)
- Kafka (1)
最新评论
-
w47_csdn:
证书安装:在"浏览"选项中选择" ...
Java加密技术(九)——初探SSL -
w47_csdn:
spiritfrog 写道你好,我按照你的步骤,tomcat中 ...
Java加密技术(九)——初探SSL -
liuyachao111:
11楼说的对 用@ControllerAdvicepublic ...
Spring 注解学习手札(八)补遗——@ExceptionHandler -
irayslu:
作者你好, 我把你的源码放在jdk6, jdk7 中运行正常, ...
Java加密技术(五)——非对称加密算法的由来DH -
夏季浅忆-卖小子:
为什么不能解压rar格式的压缩包呢
Java压缩技术(三) ZIP解压缩——Java原生实现
接下来我们介绍典型的非对称加密算法——RSA
RSA
这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman。
这种加密算法的特点主要是密钥的变化,上文我们看到DES只有一个密钥。相当于只有一把钥匙,如果这把钥匙丢了,数据也就不安全了。RSA同时有两把钥匙,公钥与私钥。同时支持数字签名。数字签名的意义在于,对传输过来的数据进行校验。确保数据在传输工程中不被修改。
流程分析:
按如上步骤给出序列图,如下:
通过java代码实现如下:Coder类见 Java加密技术(一)
再给出一个测试类:
控制台输出:
简要总结一下,使用公钥加密、私钥解密,完成了乙方到甲方的一次数据传递,通过私钥加密、公钥解密,同时通过私钥签名、公钥验证签名,完成了一次甲方到乙方的数据传递与验证,两次数据传递完成一整套的数据交互!
类似数字签名,数字信封是这样描述的:
数字信封
数字信封用加密技术来保证只有特定的收信人才能阅读信的内容。
流程:
信息发送方采用对称密钥来加密信息,然后再用接收方的公钥来加密此对称密钥(这部分称为数字信封),再将它和信息一起发送给接收方;接收方先用相应的私钥打开数字信封,得到对称密钥,然后使用对称密钥再解开信息。
相关链接:
Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC
Java加密技术(二)——对称加密DES&AES
Java加密技术(三)——PBE算法
Java加密技术(四)——非对称加密算法RSA
Java加密技术(五)——非对称加密算法的由来DH
Java加密技术(六)——数字签名算法DSA
Java加密技术(七)——非对称加密算法最高ECC
Java加密技术(八)——数字证书
Java加密技术(九)——初探SSL
Java加密技术(十)——单向认证
Java加密技术(十一)——双向认证
Java加密技术(十二)——*.PFX(*.p12)&个人信息交换文件
公钥是不担心被截获的,之所以是公钥,就是公开发行的秘钥,譬如数字证书就是公钥的载体,任何人都可以拿到。如果公钥签名/加密的数据被截获也没有关系,因为只有对应的私钥才能校验/解密。可以好好看看非对称加密那一章的基本理论。
先统一字符集编码,然后再测试下试试
都没有。。。貌似需要硬件加密。。。我曾经苦恼过
RSA
这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman。
这种加密算法的特点主要是密钥的变化,上文我们看到DES只有一个密钥。相当于只有一把钥匙,如果这把钥匙丢了,数据也就不安全了。RSA同时有两把钥匙,公钥与私钥。同时支持数字签名。数字签名的意义在于,对传输过来的数据进行校验。确保数据在传输工程中不被修改。
流程分析:
- 甲方构建密钥对儿,将公钥公布给乙方,将私钥保留。
- 甲方使用私钥加密数据,然后用私钥对加密后的数据签名,发送给乙方签名以及加密后的数据;乙方使用公钥、签名来验证待解密数据是否有效,如果有效使用公钥对数据解密。
- 乙方使用公钥加密数据,向甲方发送经过加密后的数据;甲方获得加密数据,通过私钥解密。
按如上步骤给出序列图,如下:
通过java代码实现如下:Coder类见 Java加密技术(一)
import java.security.Key; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.security.Signature; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import java.util.HashMap; import java.util.Map; import javax.crypto.Cipher; /** * RSA安全编码组件 * * @author 梁栋 * @version 1.0 * @since 1.0 */ public abstract class RSACoder extends Coder { public static final String KEY_ALGORITHM = "RSA"; public static final String SIGNATURE_ALGORITHM = "MD5withRSA"; private static final String PUBLIC_KEY = "RSAPublicKey"; private static final String PRIVATE_KEY = "RSAPrivateKey"; /** * 用私钥对信息生成数字签名 * * @param data * 加密数据 * @param privateKey * 私钥 * * @return * @throws Exception */ public static String sign(byte[] data, String privateKey) throws Exception { // 解密由base64编码的私钥 byte[] keyBytes = decryptBASE64(privateKey); // 构造PKCS8EncodedKeySpec对象 PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes); // KEY_ALGORITHM 指定的加密算法 KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); // 取私钥匙对象 PrivateKey priKey = keyFactory.generatePrivate(pkcs8KeySpec); // 用私钥对信息生成数字签名 Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM); signature.initSign(priKey); signature.update(data); return encryptBASE64(signature.sign()); } /** * 校验数字签名 * * @param data * 加密数据 * @param publicKey * 公钥 * @param sign * 数字签名 * * @return 校验成功返回true 失败返回false * @throws Exception * */ public static boolean verify(byte[] data, String publicKey, String sign) throws Exception { // 解密由base64编码的公钥 byte[] keyBytes = decryptBASE64(publicKey); // 构造X509EncodedKeySpec对象 X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes); // KEY_ALGORITHM 指定的加密算法 KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); // 取公钥匙对象 PublicKey pubKey = keyFactory.generatePublic(keySpec); Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM); signature.initVerify(pubKey); signature.update(data); // 验证签名是否正常 return signature.verify(decryptBASE64(sign)); } /** * 解密<br> * 用私钥解密 * * @param data * @param key * @return * @throws Exception */ public static byte[] decryptByPrivateKey(byte[] data, String key) throws Exception { // 对密钥解密 byte[] keyBytes = decryptBASE64(key); // 取得私钥 PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); Key privateKey = keyFactory.generatePrivate(pkcs8KeySpec); // 对数据解密 Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); cipher.init(Cipher.DECRYPT_MODE, privateKey); return cipher.doFinal(data); } /** * 解密<br> * 用公钥解密 * * @param data * @param key * @return * @throws Exception */ public static byte[] decryptByPublicKey(byte[] data, String key) throws Exception { // 对密钥解密 byte[] keyBytes = decryptBASE64(key); // 取得公钥 X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); Key publicKey = keyFactory.generatePublic(x509KeySpec); // 对数据解密 Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); cipher.init(Cipher.DECRYPT_MODE, publicKey); return cipher.doFinal(data); } /** * 加密<br> * 用公钥加密 * * @param data * @param key * @return * @throws Exception */ public static byte[] encryptByPublicKey(byte[] data, String key) throws Exception { // 对公钥解密 byte[] keyBytes = decryptBASE64(key); // 取得公钥 X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); Key publicKey = keyFactory.generatePublic(x509KeySpec); // 对数据加密 Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); cipher.init(Cipher.ENCRYPT_MODE, publicKey); return cipher.doFinal(data); } /** * 加密<br> * 用私钥加密 * * @param data * @param key * @return * @throws Exception */ public static byte[] encryptByPrivateKey(byte[] data, String key) throws Exception { // 对密钥解密 byte[] keyBytes = decryptBASE64(key); // 取得私钥 PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); Key privateKey = keyFactory.generatePrivate(pkcs8KeySpec); // 对数据加密 Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); cipher.init(Cipher.ENCRYPT_MODE, privateKey); return cipher.doFinal(data); } /** * 取得私钥 * * @param keyMap * @return * @throws Exception */ public static String getPrivateKey(Map<String, Object> keyMap) throws Exception { Key key = (Key) keyMap.get(PRIVATE_KEY); return encryptBASE64(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 encryptBASE64(key.getEncoded()); } /** * 初始化密钥 * * @return * @throws Exception */ public static Map<String, Object> initKey() throws Exception { KeyPairGenerator keyPairGen = KeyPairGenerator .getInstance(KEY_ALGORITHM); keyPairGen.initialize(1024); KeyPair keyPair = keyPairGen.generateKeyPair(); // 公钥 RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); // 私钥 RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); Map<String, Object> keyMap = new HashMap<String, Object>(2); keyMap.put(PUBLIC_KEY, publicKey); keyMap.put(PRIVATE_KEY, privateKey); return keyMap; } }
再给出一个测试类:
import static org.junit.Assert.*; import org.junit.Before; import org.junit.Test; import java.util.Map; /** * * @author 梁栋 * @version 1.0 * @since 1.0 */ public class RSACoderTest { private String publicKey; private String privateKey; @Before public void setUp() throws Exception { Map<String, Object> keyMap = RSACoder.initKey(); publicKey = RSACoder.getPublicKey(keyMap); privateKey = RSACoder.getPrivateKey(keyMap); System.err.println("公钥: \n\r" + publicKey); System.err.println("私钥: \n\r" + privateKey); } @Test public void test() throws Exception { System.err.println("公钥加密——私钥解密"); String inputStr = "abc"; byte[] data = inputStr.getBytes(); byte[] encodedData = RSACoder.encryptByPublicKey(data, publicKey); byte[] decodedData = RSACoder.decryptByPrivateKey(encodedData, privateKey); String outputStr = new String(decodedData); System.err.println("加密前: " + inputStr + "\n\r" + "解密后: " + outputStr); assertEquals(inputStr, outputStr); } @Test public void testSign() throws Exception { System.err.println("私钥加密——公钥解密"); String inputStr = "sign"; byte[] data = inputStr.getBytes(); byte[] encodedData = RSACoder.encryptByPrivateKey(data, privateKey); byte[] decodedData = RSACoder .decryptByPublicKey(encodedData, publicKey); String outputStr = new String(decodedData); System.err.println("加密前: " + inputStr + "\n\r" + "解密后: " + outputStr); assertEquals(inputStr, outputStr); System.err.println("私钥签名——公钥验证签名"); // 产生签名 String sign = RSACoder.sign(encodedData, privateKey); System.err.println("签名:\r" + sign); // 验证签名 boolean status = RSACoder.verify(encodedData, publicKey, sign); System.err.println("状态:\r" + status); assertTrue(status); } }
控制台输出:
公钥: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCYU/+I0+z1aBl5X6DUUOHQ7FZpmBSDbKTtx89J EcB64jFCkunELT8qiKly7fzEqD03g8ALlu5XvX+bBqHFy7YPJJP0ekE2X3wjUnh2NxlqpH3/B/xm 1ZdSlCwDIkbijhBVDjA/bu5BObhZqQmDwIxlQInL9oVz+o6FbAZCyHBd7wIDAQAB 私钥: MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJhT/4jT7PVoGXlfoNRQ4dDsVmmY FINspO3Hz0kRwHriMUKS6cQtPyqIqXLt/MSoPTeDwAuW7le9f5sGocXLtg8kk/R6QTZffCNSeHY3 GWqkff8H/GbVl1KULAMiRuKOEFUOMD9u7kE5uFmpCYPAjGVAicv2hXP6joVsBkLIcF3vAgMBAAEC gYBvZHWoZHmS2EZQqKqeuGr58eobG9hcZzWQoJ4nq/CarBAjw/VovUHE490uK3S9ht4FW7Yzg3LV /MB06Huifh6qf/X9NQA7SeZRRC8gnCQk6JuDIEVJOud5jU+9tyumJakDKodQ3Jf2zQtNr+5ZdEPl uwWgv9c4kmpjhAdyMuQmYQJBANn6pcgvyYaia52dnu+yBUsGkaFfwXkzFSExIbi0MXTkhEb/ER/D rLytukkUu5S5ecz/KBa8U4xIslZDYQbLz5ECQQCy5dutt7RsxN4+dxCWn0/1FrkWl2G329Ucewm3 QU9CKu4D+7Kqdj+Ha3lXP8F0Etaaapi7+EfkRUpukn2ItZV/AkEAlk+I0iphxT1rCB0Q5CjWDY5S Df2B5JmdEG5Y2o0nLXwG2w44OLct/k2uD4cEcuITY5Dvi/4BftMCZwm/dnhEgQJACIktJSnJwxLV o9dchENPtlsCM9C/Sd2EWpqISSUlmfugZbJBwR5pQ5XeMUqKeXZYpP+HEBj1nS+tMH9u2/IGEwJA fL8mZiZXan/oBKrblAbplNcKWGRVD/3y65042PAEeghahlJMiYquV5DzZajuuT0wbJ5xQuZB01+X nfpFpBJ2dw== 公钥加密——私钥解密 加密前: abc 解密后: abc 公钥: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDdOj40yEB48XqWxmPILmJAc7UecIN7F32etSHF 9rwbuEh3+iTPOGSxhoSQpOED0vOb0ZIMkBXZSgsxLaBSin2RZ09YKWRjtpCA0kDkiD11gj4tzTiM l9qq1kwSK7ZkGAgodEn3yIILVmQDuEImHOXFtulvJ71ka07u3LuwUNdB/wIDAQAB 私钥: MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN06PjTIQHjxepbGY8guYkBztR5w g3sXfZ61IcX2vBu4SHf6JM84ZLGGhJCk4QPS85vRkgyQFdlKCzEtoFKKfZFnT1gpZGO2kIDSQOSI PXWCPi3NOIyX2qrWTBIrtmQYCCh0SffIggtWZAO4QiYc5cW26W8nvWRrTu7cu7BQ10H/AgMBAAEC gYEAz2JWBizjI31bqhP4XiP9PuY5F3vqBW4T+L9cFbQiyumKJc58yzTWUAUGKIIn3enXLG7dNqGr mbJro4JeFIJ3CiVDpXR9+FluIgI4SXm7ioGKF2NOMA9LR5Fu82W+pLfpTN2y2SaLYWEDZyp53BxY j9gUxaxi1MQs+C1ZgDF2xmECQQDy70bQntbRfysP+ppCtd56YRnES1Tyekw0wryS2tr+ivQJl7JF gp5rPAOXpgrq36xHDwUspQ0sJ0vj0O7ywxr1AkEA6SAaLhrJJrYucC0jxwAhUYyaPN+aOsWymaRh 9jA/Wc0wp29SbGTh5CcMuGpXm1g0M+FKW3dGiHgS3rVUKim4owJAbnxgapUzAgiiHxxMeDaavnHW 9C2GrtjsO7qtZOTgYI/1uT8itvZW8lJTF+9OW8/qXE76fXl7ai9dFnl5kzMk2QJBALfHz/vCsArt mkRiwY6zApE4Z6tPl1V33ymSVovvUzHnOdD1SKQdD5t+UV/crb3QVi8ED0t2B0u0ZSPfDT/D7kMC QDpwdj9k2F5aokLHBHUNJPFDAp7a5QMaT64gv/d48ITJ68Co+v5WzLMpzJBYXK6PAtqIhxbuPEc2 I2k1Afmrwyw= 私钥加密——公钥解密 加密前: sign 解密后: sign 私钥签名——公钥验证签名 签名: ud1RsIwmSC1pN22I4IXteg1VD2FbiehKUfNxgVSHzvQNIK+d20FCkHCqh9djP3h94iWnIUY0ifU+ mbJkhAl/i5krExOE0hknOnPMcEP+lZV1RbJI2zG2YooSp2XDleqrQk5e/QF2Mx0Zxt8Xsg7ucVpn i3wwbYWs9wSzIf0UjlM= 状态: true
简要总结一下,使用公钥加密、私钥解密,完成了乙方到甲方的一次数据传递,通过私钥加密、公钥解密,同时通过私钥签名、公钥验证签名,完成了一次甲方到乙方的数据传递与验证,两次数据传递完成一整套的数据交互!
类似数字签名,数字信封是这样描述的:
数字信封
数字信封用加密技术来保证只有特定的收信人才能阅读信的内容。
流程:
信息发送方采用对称密钥来加密信息,然后再用接收方的公钥来加密此对称密钥(这部分称为数字信封),再将它和信息一起发送给接收方;接收方先用相应的私钥打开数字信封,得到对称密钥,然后使用对称密钥再解开信息。
相关链接:
Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC
Java加密技术(二)——对称加密DES&AES
Java加密技术(三)——PBE算法
Java加密技术(四)——非对称加密算法RSA
Java加密技术(五)——非对称加密算法的由来DH
Java加密技术(六)——数字签名算法DSA
Java加密技术(七)——非对称加密算法最高ECC
Java加密技术(八)——数字证书
Java加密技术(九)——初探SSL
Java加密技术(十)——单向认证
Java加密技术(十一)——双向认证
Java加密技术(十二)——*.PFX(*.p12)&个人信息交换文件
评论
11 楼
snowolf
2013-12-27
chengxuetao 写道
我想问下,甲方向乙方公布公匙,如果被截获,并且发送的签名及加密数据也被截获,那么截获者是不是可以伪装成乙方对甲方发送消息,如果是的话这种情况要怎么解决呢
公钥是不担心被截获的,之所以是公钥,就是公开发行的秘钥,譬如数字证书就是公钥的载体,任何人都可以拿到。如果公钥签名/加密的数据被截获也没有关系,因为只有对应的私钥才能校验/解密。可以好好看看非对称加密那一章的基本理论。
10 楼
snowolf
2013-12-27
jahu 写道
请问下,X509EncodedKeySpec ,PKCS8EncodedKeySpec这个两个类有什么用吗?
一般是用来做公私钥的二进制<-->公私钥对象转化。
9 楼
chengxuetao
2013-12-27
我想问下,甲方向乙方公布公匙,如果被截获,并且发送的签名及加密数据也被截获,那么截获者是不是可以伪装成乙方对甲方发送消息,如果是的话这种情况要怎么解决呢
8 楼
jahu
2013-09-28
请问下,X509EncodedKeySpec ,PKCS8EncodedKeySpec这个两个类有什么用吗?
7 楼
snowolf
2013-08-07
juwend 写道
如果被加密的明文使用
String ming = ((char) 134) + "";
即使用asc码大于127或者小于0的这种字符组成字符串
加密之后再解密
拿明文ming对比解密的数据,使用equal方法,会得到false,意思就是加解密肯定出了问题,我目测应该是加密的时候出的问题
这种问题如何解决,谢谢!
String ming = ((char) 134) + "";
即使用asc码大于127或者小于0的这种字符组成字符串
加密之后再解密
拿明文ming对比解密的数据,使用equal方法,会得到false,意思就是加解密肯定出了问题,我目测应该是加密的时候出的问题
这种问题如何解决,谢谢!
先统一字符集编码,然后再测试下试试
6 楼
juwend
2013-07-22
如果被加密的明文使用
String ming = ((char) 134) + "";
即使用asc码大于127或者小于0的这种字符组成字符串
加密之后再解密
拿明文ming对比解密的数据,使用equal方法,会得到false,意思就是加解密肯定出了问题,我目测应该是加密的时候出的问题
这种问题如何解决,谢谢!
String ming = ((char) 134) + "";
即使用asc码大于127或者小于0的这种字符组成字符串
加密之后再解密
拿明文ming对比解密的数据,使用equal方法,会得到false,意思就是加解密肯定出了问题,我目测应该是加密的时候出的问题
这种问题如何解决,谢谢!
5 楼
雨季醉清风
2013-05-10
楼主,相当给力啊,在数据加密这块,也是顶级人物!
4 楼
snowolf
2013-05-07
AlgoThinking 写道
楼主你好,感谢分享好文章,我现在也在学习椭圆曲线,需要用到椭圆曲线的数字签名,但jdk1.6中好像没有提供相应的API。
都没有。。。貌似需要硬件加密。。。我曾经苦恼过
3 楼
AlgoThinking
2013-05-05
楼主你好,感谢分享好文章,我现在也在学习椭圆曲线,需要用到椭圆曲线的数字签名,但jdk1.6中好像没有提供相应的API。
2 楼
路上f
2013-01-09
能否打个包发到:gesulong1992@163.com,还有所需要的jar包,谢谢~~~~~~~
1 楼
ldmSeven
2012-08-16
大虾好身手,学习中
发表评论
-
SSLSocket获取数字证书
2013-06-05 17:53 0SSLSocket直接获得数字证书 package ... -
Java加密技术(十三)——由PEM文件获取密钥
2012-07-20 17:57 0密钥库文件通常是PEM格式,这一般是由OpenSSL生成。与J ... -
《Java加密与解密的艺术》重印,销往台湾!
2010-12-03 09:34 4781感谢大家对于《Java加密与解密的艺术》一直依赖的关注! ... -
Java加密技术(十二)——*.PFX(*.p12)&个人信息交换文件
2010-08-12 11:17 38389今天来点实际工作中的硬通货! 与计费系统打交道,少不了用到加密 ... -
Jasig CAS使用手札——一、了解Jasig CAS,简单运行!
2010-08-10 17:13 31455SSO : 单点登录(Single S ... -
《Java加密与解密的艺术》——配书源代码提供下载
2010-08-04 17:37 9777《Java加密与解密的艺术》上市小半年了,有不少朋友通过Jav ... -
Security证书相关文件格式汇总及其格式转换工具介绍
2010-06-10 17:58 0前段时间利用数字证书对几种语言(Java、.Net、Php) ... -
PKI常见证书格式和转换
2010-06-10 17:11 0PKCS 全称是 Public-Key Cryptograph ... -
《Java加密与解密的艺术》——迷你版提供下载
2010-06-03 23:57 8469《Java加密与解密的艺术》上市已2个月,有很多博友向我索要《 ... -
pkf<---->jks
2010-06-02 18:00 0/** * 从PKCS12格式转换为JKS格式 ... -
keytool建立双向认证
2010-06-02 15:18 0echo off echo 构建目录 mkdir ... -
关于Java企业级应用开发中的安全知识的探讨
2010-05-04 13:33 4091相信绝大多数做Java的朋友或多或少都会接触到Java安全技术 ... -
我与《Java加密与解密的艺术》——从写博客到写书
2010-04-29 16:07 8789时间飞快,《Java加密与解密的艺术》上市快有一个月了,虽然具 ... -
配置PKCS#11
2010-04-21 18:24 0配置PKCS#11(初学者) [ ... -
《Java加密与解密的艺术》本周上市,样书免费送!
2010-03-31 16:04 4997“千呼万唤使出来”——《Java加密与解密的艺术》终于要在本周 ... -
《Java加密与解密的艺术》封面已定,即将上市!
2010-03-15 22:15 6170经过一周多的反复审核,《Java加密与解密的艺术》封面终于敲定 ... -
《Java加密与解密的艺术》即将上市!
2010-03-01 09:47 7483不曾想,我的博客《Java ... -
Java加密技术(十一)——双向认证
2009-11-05 23:06 38828对于双向认证,做一个简单的描述。 服务器端下发证书,客户端接受 ... -
OSI安全体系结构
2009-06-10 18:41 5792最近研究安全技术,终 ... -
Java加密技术(十)——单向认证
2009-05-29 17:52 27669在Java 加密技术(九)中,我们使用自签名证书完成了 ...
相关推荐
同时,文件中的`非对称加密算法 数字签名算法——RSA - 信息安全 - ITeye知识库频道_files`可能包含更多示例代码和详细解释,有助于进一步学习和实践。 总之,非对称加密算法和数字签名是保障网络通信安全的重要...
2. 在Java中实现对称加密算法,需要掌握如何使用Java加密扩展(Java Cryptography Extension, JCE),这是一套加密算法API,可以方便地在Java程序中集成加密功能。 对DES算法而言,它是一个对称密钥的块加密算法,...
RSA,由其发明者Ron Rivest、Adi Shamir和Leonard Adleman的名字首字母组成,是一种非对称加密算法,这意味着它使用一对密钥——公钥和私钥——进行加密和解密。 在Java中实现RSA加密,首先需要通过`java.security....
RSA是一种非对称加密算法,它使用一对密钥——公钥和私钥,公钥用于加密,私钥用于解密,确保了即使数据在网络中被截获,也无法被未经授权的第三方解密。 首先,我们来理解RSA的核心原理。RSA算法基于大数因子分解...
RSA算法是其中最著名和广泛使用的非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。这个"RSA.rar_非对称加密_非对称算法"压缩包很可能是包含了一套关于RSA算法的教程或代码...
总之,RSA非对称加密算法是一种重要的信息安全技术,它在Java等编程语言中有着广泛的应用。通过公钥加密和私钥解密,确保了信息在传输过程中的安全性。在实际开发中,理解并正确使用RSA算法对于保障网络安全至关重要...
在Java中,非对称加密算法如RSA是一种广泛使用的安全技术,它允许数据在不安全的环境中进行加密和解密,同时保持数据的机密性。RSA算法基于两个不同的密钥:公钥和私钥。公钥是公开的,任何人都可以获取,用于加密...
Java中的RSA非对称加密是一种广泛使用的网络安全技术,它基于两个不同的密钥——公钥和私钥,分别用于加密和解密数据。RSA算法的安全性基于大整数因子分解的困难性,使得即使获取到公钥,也无法轻易破解加密的信息。...
对称加密算法使用同一个密钥进行加密和解密操作,而非对称加密算法则需要一对密钥——公钥用于加密,而私钥用于解密。 ##### 2.1 对称加密算法 对称加密算法因其高效性和易于实现的特点,在日常应用中非常普遍。...
总结来说,这个"java加密技术"资源涵盖了基础和高级的加密算法,包括Base64、DES、AES、RSA,以及哈希函数和证书管理。通过学习这些内容,开发者可以更好地理解和应用加密技术,提升系统的安全性。
AES是一种对称加密算法,而RSA是公钥/非对称加密算法。这两种算法在信息安全领域中扮演着重要的角色。 AES加密是一种块加密算法,使用相同的密钥进行加密和解密。它以其高效率和安全性而闻名,常用于数据存储和传输...
Java通过丰富的库支持了多种非对称加密算法,并提供了方便的API来管理和使用密钥对。理解并正确使用非对称加密,尤其是私钥和公钥的区分与应用,对于任何涉及网络安全的Java开发者来说都是必备技能。
RSA是一种广泛使用的非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。它在网络安全领域扮演着重要角色,尤其在数据传输和数字签名中。非对称加密与传统的对称加密不同,它...
des.rar_DES rsa_java res des加密通信_rsa_rsa通信_加密通信"的资源中,我们主要探讨的是两种常见的对称与非对称加密算法——DES(Data Encryption Standard)和RSA(Rivest-Shamir-Adleman),以及它们在Java环境...
**RSA**是一种非对称加密算法,由两个密钥——公钥和私钥组成。公钥用于加密,而私钥用于解密。这种方式的优点在于,只有拥有私钥的一方才能解密通过公钥加密的数据,增加了安全性。在JavaScript和Java之间进行通信...
- RSA是一种非对称加密算法,它使用两个不同的密钥——公钥和私钥。公钥可以公开,用于加密数据;私钥必须保密,用于解密数据。这种方式增加了安全性,因为即使攻击者获得了公钥,也无法解密数据,除非他们也能获取...
RSA是一种非对称加密算法,而AES是一种对称加密算法。这两种加密方式各有优势,混合使用可以兼顾效率和安全性。 首先,RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,它的特点是公钥和私钥不同,用于加密的...
RSA加密是一种非对称加密算法,它是现代密码学的基石之一,广泛应用于网络安全、数据加密、数字签名等领域。本入门示例将带你了解RSA的基本原理和实现过程。 首先,我们来了解一下RSA加密的基础知识。RSA是由Ron ...
**RSA** 是一种非对称加密算法,它使用两个不同的密钥——公钥和私钥。公钥用于加密,私钥用于解密,确保只有持有私钥的人才能解密信息。在Java中,我们可以通过java.security.KeyPairGenerator和Cipher类生成并使用...