`

Java加密技术之RSA

阅读更多
核心提示:RSA 这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman.这种加密算法的特点主要是密钥的变化,上文我们看到DES只有一个密

   RSA

    这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman.这种加密算法的特点主要是密钥的变化,上文我们看到DES只有一个密钥。相当于只有一把钥匙,如果这把钥匙丢了,数据也就不安全了。RSA同时有两把钥匙,公钥与私钥。同时支持数字签名。数字签名的意义在于,对传输过来的数据进行校验。确保数据在传输工程中不被修改。

    流程分析:

    1、甲方构建密钥对儿,将公钥公布给乙方,将私钥保留。

    2、甲方使用私钥加密数据,然后用私钥对加密后的数据签名,发送给乙方签名以及加密后的数据;乙方使用公钥、签名来验证待解密数据是否有效,如果有效使用公钥对数据解密。

    3、乙方使用公钥加密数据,向甲方发送经过加密后的数据;甲方获得加密数据,通过私钥解密。

    通过java代码实现如下:

  1. import java.security.Key;      
  2. import java.security.KeyFactory;      
  3. import java.security.KeyPair;      
  4. import java.security.KeyPairGenerator;      
  5. import java.security.PrivateKey;      
  6. import java.security.PublicKey;      
  7. import java.security.Signature;      
  8. import java.security.interfaces.RSAPrivateKey;      
  9. import java.security.interfaces.RSAPublicKey;      
  10. import java.security.spec.PKCS8EncodedKeySpec;      
  11. import java.security.spec.X509EncodedKeySpec;      
  12.      
  13. import java.util.HashMap;      
  14. import java.util.Map;      
  15.      
  16. import javax.crypto.Cipher;      
  17.      
  18. /** *//**     
  19.  * RSA安全编码组件     
  20.  *      
  21.  * @author 梁栋  http://www.bt285.cn http://www.5a520.cn    
  22.  * @version 1.0     
  23.  * @since 1.0     
  24.  */     
  25. public abstract class RSACoder extends Coder {     
  26.     public static final String KEY_ALGORITHM = "RSA";     
  27.     public static final String SIGNATURE_ALGORITHM = "MD5withRSA";     
  28.     
  29.     private static final String PUBLIC_KEY = "RSAPublicKey";     
  30.     private static final String PRIVATE_KEY = "RSAPrivateKey";     
  31.     
  32.     /** *//**    
  33.      * 用私钥对信息生成数字签名    
  34.      *     
  35.      * @param data    
  36.      *            加密数据    
  37.      * @param privateKey    
  38.      *            私钥    
  39.      *     
  40.      * @return    
  41.      * @throws Exception    
  42.      */    
  43.     public static String sign(byte[] data, String privateKey) throws Exception {     
  44.         // 解密由base64编码的私钥     
  45.         byte[] keyBytes = decryptBASE64(privateKey);     
  46.     
  47.         // 构造PKCS8EncodedKeySpec对象     
  48.         PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);     
  49.     
  50.         // KEY_ALGORITHM 指定的加密算法     
  51.         KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);     
  52.     
  53.         // 取私钥匙对象     
  54.         PrivateKey priKey = keyFactory.generatePrivate(pkcs8KeySpec);     
  55.     
  56.         // 用私钥对信息生成数字签名     
  57.         Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);     
  58.         signature.initSign(priKey);     
  59.         signature.update(data);     
  60.     
  61.         return encryptBASE64(signature.sign());     
  62.     }      
  63.      
  64.     /** *//**     
  65.      * 校验数字签名     
  66.      *      
  67.      * @param data     
  68.      *            加密数据     
  69.      * @param publicKey     
  70.      *            公钥     
  71.      * @param sign     
  72.      *            数字签名     
  73.      *      
  74.      * @return 校验成功返回true 失败返回false     
  75.      * @throws Exception     
  76.      *      
  77.      */     
  78.     public static boolean verify(byte[] data, String publicKey, String sign)      
  79.             throws Exception {     
  80.     
  81.         // 解密由base64编码的公钥     
  82.         byte[] keyBytes = decryptBASE64(publicKey);     
  83.     
  84.         // 构造X509EncodedKeySpec对象     
  85.         X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);     
  86.     
  87.         // KEY_ALGORITHM 指定的加密算法     
  88.         KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);     
  89.     
  90.         // 取公钥匙对象     
  91.         PublicKey pubKey = keyFactory.generatePublic(keySpec);     
  92.     
  93.         Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);     
  94.         signature.initVerify(pubKey);     
  95.         signature.update(data);     
  96.     
  97.         // 验证签名是否正常     
  98.         return signature.verify(decryptBASE64(sign));     
  99.     }      
  100.      
  101.     /** *//**     
  102.      * 解密<br>     
  103.      * 用私钥解密  http://www.5a520.cn http://www.feng123.com   
  104.      *      
  105.      * @param data     
  106.      * @param key     
  107.      * @return     
  108.      * @throws Exception     
  109.      */     
  110.     public static byte[] decryptByPrivateKey(byte[] data, String key)      
  111.             throws Exception {     
  112.         // 对密钥解密     
  113.         byte[] keyBytes = decryptBASE64(key);     
  114.     
  115.         // 取得私钥     
  116.         PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);     
  117.         KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);     
  118.         Key privateKey = keyFactory.generatePrivate(pkcs8KeySpec);     
  119.     
  120.         // 对数据解密     
  121.         Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());     
  122.         cipher.init(Cipher.DECRYPT_MODE, privateKey);     
  123.     
  124.         return cipher.doFinal(data);     
  125.     }      
  126.      
  127.     /** *//**     
  128.      * 解密<br>     
  129.      * 用私钥解密     
  130.      *      
  131.      * @param data     
  132.      * @param key     
  133.      * @return     
  134.      * @throws Exception     
  135.      */     
  136.     public static byte[] decryptByPublicKey(byte[] data, String key)      
  137.             throws Exception {     
  138.         // 对密钥解密     
  139.         byte[] keyBytes = decryptBASE64(key);     
  140.     
  141.         // 取得公钥     
  142.         X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);     
  143.         KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);     
  144.         Key publicKey = keyFactory.generatePublic(x509KeySpec);     
  145.     
  146.         // 对数据解密     
  147.         Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());     
  148.         cipher.init(Cipher.DECRYPT_MODE, publicKey);     
  149.     
  150.         return cipher.doFinal(data);     
  151.     }      
  152.      
  153.     /** *//**     
  154.      * 加密<br>     
  155.      * 用公钥加密     
  156.      *      
  157.      * @param data     
  158.      * @param key     
  159.      * @return     
  160.      * @throws Exception     
  161.      */     
  162.     public static byte[] encryptByPublicKey(byte[] data, String key)      
  163.             throws Exception {     
  164.         // 对公钥解密     
  165.         byte[] keyBytes = decryptBASE64(key);     
  166.     
  167.         // 取得公钥     
  168.         X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);     
  169.         KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);     
  170.         Key publicKey = keyFactory.generatePublic(x509KeySpec);     
  171.     
  172.         // 对数据加密     
  173.         Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());     
  174.         cipher.init(Cipher.ENCRYPT_MODE, publicKey);     
  175.     
  176.         return cipher.doFinal(data);     
  177.     }      
  178.      
  179.     /** *//**     
  180.      * 加密<br>     
  181.      * 用私钥加密     
  182.      *      
  183.      * @param data     
  184.      * @param key     
  185.      * @return     
  186.      * @throws Exception     
  187.      */     
  188.     public static byte[] encryptByPrivateKey(byte[] data, String key)      
  189.             throws Exception {     
  190.         // 对密钥解密     
  191.         byte[] keyBytes = decryptBASE64(key);     
  192.     
  193.         // 取得私钥     
  194.         PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);     
  195.         KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);     
  196.         Key privateKey = keyFactory.generatePrivate(pkcs8KeySpec);     
  197.     
  198.         // 对数据加密     
  199.         Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());     
  200.         cipher.init(Cipher.ENCRYPT_MODE, privateKey);     
  201.     
  202.         return cipher.doFinal(data);     
  203.     }      
  204.      
  205.     /** *//**     
  206.      * 取得私钥     
  207.      *      
  208.      * @param keyMap     
  209.      * @return     
  210.      * @throws Exception     
  211.      */     
  212.     public static String getPrivateKey(Map<String, Object> keyMap)      
  213.             throws Exception {     
  214.         Key key = (Key) keyMap.get(PRIVATE_KEY);     
  215.     
  216.         return encryptBASE64(key.getEncoded());     
  217.     }      
  218.      
  219.     /** *//**     
  220.      * 取得公钥     
  221.      *      
  222.      * @param keyMap     
  223.      * @return     
  224.      * @throws Exception     
  225.      */     
  226.     public static String getPublicKey(Map<String, Object> keyMap)      
  227.             throws Exception {     
  228.         Key key = (Key) keyMap.get(PUBLIC_KEY);     
  229.     
  230.         return encryptBASE64(key.getEncoded());     
  231.     }      
  232.      
  233.     /** *//**     
  234.      * 初始化密钥     
  235.      *      
  236.      * @return     
  237.      * @throws Exception     
  238.      */     
  239.     public static Map<String, Object> initKey() throws Exception {     
  240.         KeyPairGenerator keyPairGen = KeyPairGenerator     
  241.                 .getInstance(KEY_ALGORITHM);     
  242.         keyPairGen.initialize(1024);     
  243.     
  244.         KeyPair keyPair = keyPairGen.generateKeyPair();     
  245.     
  246.         // 公钥     
  247.         RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();     
  248.     
  249.         // 私钥     
  250.         RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();     
  251.     
  252.         Map<String, Object> keyMap = new HashMap<String, Object>(2);     
  253.     
  254.         keyMap.put(PUBLIC_KEY, publicKey);     
  255.         keyMap.put(PRIVATE_KEY, privateKey);     
  256.         return keyMap;     
  257.     }      
  258. }    

再给出一个测试类:

  1. import static org.junit.Assert.*;      
  2.      
  3. import org.junit.Before;      
  4. import org.junit.Test;      
  5.      
  6. import java.util.Map;      
  7.      
  8. /** *//**    
  9.  *     
  10.  * @author 梁栋  http://www.bt285.cn  http://www.guihua.org  
  11.  * @version 1.0    
  12.  * @since 1.0    
  13.  */     
  14. public class RSACoderTest {      
  15.     private String publicKey;      
  16.     private String privateKey;      
  17.      
  18.     @Before     
  19.     public void setUp() throws Exception {      
  20.         Map<String, Object> keyMap = RSACoder.initKey();      
  21.      
  22.         publicKey = RSACoder.getPublicKey(keyMap);      
  23.         privateKey = RSACoder.getPrivateKey(keyMap);      
  24.         System.err.println("公钥: \n\r" + publicKey);      
  25.         System.err.println("私钥: \n\r" + privateKey);      
  26.     }      
  27.      
  28.     @Test     
  29.     public void test() throws Exception {      
  30.         System.err.println("公钥加密——私钥解密");      
  31.         String inputStr = "abc";      
  32.         byte[] data = inputStr.getBytes();      
  33.      
  34.         byte[] encodedData = RSACoder.encryptByPublicKey(data, publicKey);      
  35.      
  36.         byte[] decodedData = RSACoder.decryptByPrivateKey(encodedData,      
  37.                 privateKey);      
  38.      
  39.         String outputStr = new String(decodedData);      
  40.         System.err.println("加密前: " + inputStr + "\n\r" + "解密后: " + outputStr);      
  41.         assertEquals(inputStr, outputStr);      
  42.      
  43.     }      
  44.      
  45.     @Test     
  46.     public void testSign() throws Exception {      
  47.         System.err.println("私钥加密——公钥解密");      
  48.         String inputStr = "sign";      
  49.         byte[] data = inputStr.getBytes();      
  50.      
  51.         byte[] encodedData = RSACoder.encryptByPrivateKey(data, privateKey);      
  52.      
  53.         byte[] decodedData = RSACoder      
  54.                 .decryptByPublicKey(encodedData, publicKey);      
  55.      
  56.         String outputStr = new String(decodedData);      
  57.         System.err.println("加密前: " + inputStr + "\n\r" + "解密后: " + outputStr);      
  58.         assertEquals(inputStr, outputStr);      
  59.      
  60.         System.err.println("私钥签名——公钥验证签名");      
  61.         // 产生签名      
  62.         String sign = RSACoder.sign(encodedData, privateKey);      
  63.         System.err.println("签名:\r" + sign);      
  64.      
  65.         // 验证签名      
  66.         boolean status = RSACoder.verify(encodedData, publicKey, sign);      
  67.         System.err.println("状态:\r" + status);      
  68.         assertTrue(status);      
  69.      
  70.     }      
  71.      
  72. }   
  73.   
  74.     Console代码:   
  75.   
  76. 公钥:   
  77.   
  78. MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCYU/+I0+z1aBl5X6DUUOHQ7FZpmBSDbKTtx89J   
  79. EcB64jFCkunELT8qiKly7fzEqD03g8ALlu5XvX+bBqHFy7YPJJP0ekE2X3wjUnh2NxlqpH3/B/xm   
  80. 1ZdSlCwDIkbijhBVDjA/bu5BObhZqQmDwIxlQInL9oVz+o6FbAZCyHBd7wIDAQAB   
  81.   
  82. 私钥:   
  83.   
  84. MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJhT/4jT7PVoGXlfoNRQ4dDsVmmY   
  85. FINspO3Hz0kRwHriMUKS6cQtPyqIqXLt/MSoPTeDwAuW7le9f5sGocXLtg8kk/R6QTZffCNSeHY3   
  86. GWqkff8H/GbVl1KULAMiRuKOEFUOMD9u7kE5uFmpCYPAjGVAicv2hXP6joVsBkLIcF3vAgMBAAEC   
  87. gYBvZHWoZHmS2EZQqKqeuGr58eobG9hcZzWQoJ4nq/CarBAjw/VovUHE490uK3S9ht4FW7Yzg3LV   
  88. /MB06Huifh6qf/X9NQA7SeZRRC8gnCQk6JuDIEVJOud5jU+9tyumJakDKodQ3Jf2zQtNr+5ZdEPl   
  89. uwWgv9c4kmpjhAdyMuQmYQJBANn6pcgvyYaia52dnu+yBUsGkaFfwXkzFSExIbi0MXTkhEb/ER/D   
  90. rLytukkUu5S5ecz/KBa8U4xIslZDYQbLz5ECQQCy5dutt7RsxN4+dxCWn0/1FrkWl2G329Ucewm3   
  91. QU9CKu4D+7Kqdj+Ha3lXP8F0Etaaapi7+EfkRUpukn2ItZV/AkEAlk+I0iphxT1rCB0Q5CjWDY5S   
  92. Df2B5JmdEG5Y2o0nLXwG2w44OLct/k2uD4cEcuITY5Dvi/4BftMCZwm/dnhEgQJACIktJSnJwxLV   
  93. o9dchENPtlsCM9C/Sd2EWpqISSUlmfugZbJBwR5pQ5XeMUqKeXZYpP+HEBj1nS+tMH9u2/IGEwJA   
  94. fL8mZiZXan/oBKrblAbplNcKWGRVD/3y65042PAEeghahlJMiYquV5DzZajuuT0wbJ5xQuZB01+X   
  95. nfpFpBJ2dw==   
  96.   
  97. 公钥加密——私钥解密   
  98. 加密前: abc   
  99.   
  100. 解密后: abc   
  101. 公钥:   
  102.   
  103. MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDdOj40yEB48XqWxmPILmJAc7UecIN7F32etSHF   
  104. 9rwbuEh3+iTPOGSxhoSQpOED0vOb0ZIMkBXZSgsxLaBSin2RZ09YKWRjtpCA0kDkiD11gj4tzTiM   
  105. l9qq1kwSK7ZkGAgodEn3yIILVmQDuEImHOXFtulvJ71ka07u3LuwUNdB/wIDAQAB   
  106.   
  107. 私钥:   
  108.   
  109. MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN06PjTIQHjxepbGY8guYkBztR5w   
  110. g3sXfZ61IcX2vBu4SHf6JM84ZLGGhJCk4QPS85vRkgyQFdlKCzEtoFKKfZFnT1gpZGO2kIDSQOSI   
  111. PXWCPi3NOIyX2qrWTBIrtmQYCCh0SffIggtWZAO4QiYc5cW26W8nvWRrTu7cu7BQ10H/AgMBAAEC   
  112. gYEAz2JWBizjI31bqhP4XiP9PuY5F3vqBW4T+L9cFbQiyumKJc58yzTWUAUGKIIn3enXLG7dNqGr   
  113. mbJro4JeFIJ3CiVDpXR9+FluIgI4SXm7ioGKF2NOMA9LR5Fu82W+pLfpTN2y2SaLYWEDZyp53BxY   
  114. j9gUxaxi1MQs+C1ZgDF2xmECQQDy70bQntbRfysP+ppCtd56YRnES1Tyekw0wryS2tr+ivQJl7JF   
  115. gp5rPAOXpgrq36xHDwUspQ0sJ0vj0O7ywxr1AkEA6SAaLhrJJrYucC0jxwAhUYyaPN+aOsWymaRh   
  116. 9jA/Wc0wp29SbGTh5CcMuGpXm1g0M+FKW3dGiHgS3rVUKim4owJAbnxgapUzAgiiHxxMeDaavnHW   
  117. 9C2GrtjsO7qtZOTgYI/1uT8itvZW8lJTF+9OW8/qXE76fXl7ai9dFnl5kzMk2QJBALfHz/vCsArt   
  118. mkRiwY6zApE4Z6tPl1V33ymSVovvUzHnOdD1SKQdD5t+UV/crb3QVi8ED0t2B0u0ZSPfDT/D7kMC   
  119. QDpwdj9k2F5aokLHBHUNJPFDAp7a5QMaT64gv/d48ITJ68Co+v5WzLMpzJBYXK6PAtqIhxbuPEc2   
  120. I2k1Afmrwyw=   
  121.   
  122. 私钥加密——公钥解密   
  123. 加密前: sign   
  124.   
  125. 解密后: sign   
  126. 私钥签名——公钥验证签名   
  127. 签名:   
  128. ud1RsIwmSC1pN22I4IXteg1VD2FbiehKUfNxgVSHzvQNIK+d20FCkHCqh9djP3h94iWnIUY0ifU+   
  129. mbJkhAl/i5krExOE0hknOnPMcEP+lZV1RbJI2zG2YooSp2XDleqrQk5e/QF2Mx0Zxt8Xsg7ucVpn   
  130. i3wwbYWs9wSzIf0UjlM=   
  131.   
  132. 状态:   
  133. true  

    简要总结一下,使用公钥加密、私钥解密,完成了乙方到甲方的一次数据传递,通过私钥加密、公钥解密,同时通过私钥签名、公钥验证签名,完成了一次甲方到乙方的数据传递与验证,两次数据传递完成一整套的数据交互!

    类似数字签名,数字信封是这样描述的:

    数字信封

    数字信封用加密技术来保证只有特定的收信人才能阅读信的内容。

    流程:

    信息发送方采用对称密钥来加密信息,然后再用接收方的公钥来加密此对称密钥(这部分称为数字信封),再将它和信息一起发送给接收方;接收方先用相应的私钥打开数字信封,得到对称密钥,然后使用对称密钥再解开信息。

分享到:
评论

相关推荐

    Java实现文件的RSA和DES加密

    Java 实现文件的 RSA 和 DES 加密 在现代密码技术中,根据密钥类型的不同,可以将其分为两类:对称加密算法(秘密钥匙加密)和非对称加密算法(公开密钥加密)。对称加密算法用来对敏感数据等信息进行加密,常用的...

    java_RSA2048加密解密.zip

    Java RSA2048加密解密技术是一种广泛应用于网络通信中的安全机制,它结合了非对称加密算法RSA和2048位的密钥长度,以提供强大的数据保护。在给定的“java_RSA2048加密解密.zip”压缩包中,包含了前后端实现RSA2048...

    rsa与aes混合加密java实现

    在IT安全领域,加密技术是保护数据免受非法访问的关键手段。本文将深入探讨两种常见的加密算法:RSA和AES,并介绍如何在Java中实现这两种算法的混合加密。RSA是一种非对称加密算法,而AES是一种对称加密算法,它们各...

    C#RSA加密与JAVA解密,实现相互通信

    "C# RSA加密与JAVA解密,实现相互通信"的主题聚焦于如何利用RSA公钥/私钥加密算法在C#和Java两个不同的编程环境中实现安全的数据交换。RSA是一种非对称加密算法,它使用一对密钥——公钥和私钥,公钥用于加密,私钥...

    Rsa加密解密.rar_RSA 加密解密_java rsa_rsa加密_rsa加密java_加密 解密

    总结来说,RSA加密解密是网络安全中的关键技术,Java提供了丰富的API支持其应用。通过生成密钥对,使用公钥加密和私钥解密,我们可以确保数据的安全传输。同时,注意合理管理和使用密钥,以防止安全风险。

    Java公钥加密算法RSA.rar

    Java公钥加密算法RSA是一种广泛应用于网络通信中的安全技术,主要基于数学问题的难度来确保数据的安全性。RSA,由其发明者Ron Rivest、Adi Shamir和Leonard Adleman的名字首字母组成,是一种非对称加密算法,这意味...

    Java RSA加密前后端实现

    Java RSA加密技术是一种广泛应用于网络通信安全中的非对称加密算法,主要特点是公钥和私钥成对出现,其中公钥用于加密,私钥用于解密。这种加密方式的安全性较高,因为即使加密数据被截获,没有相应的私钥也无法解密...

    java js RSA加密支持超长加密

    在Java和JavaScript中实现RSA加密,对于处理较长的数据至关重要,因为这两种语言的标准库默认的RSA加密只能处理相对较小的块。这里我们将深入探讨如何在Java和JavaScript中实现超长数据的RSA加密,并解决跨平台兼容...

    RSA算法JAVA公钥加密,C#私钥解密

    RSA算法是一种非对称加密技术,它在信息安全领域扮演着重要的角色。非对称加密与对称加密的主要区别在于,它使用两个不同的密钥:一个公钥用于加密,另一个私钥用于解密。RSA的名字来源于它的发明者Ron Rivest、Adi ...

    C# 实现与JAVA互通 加签/验签,RSA加密/解密

    * RSA加密解密:私钥解密,公钥加密。 * RSA数字签名-俗称加签验签:私钥加签,公钥验签。  * RSA加密解密:私钥解密,公钥加密。 * RSA数字签名-俗称加签验签:私钥加签,公钥验签。  * RSA加密解密:私钥...

    C#和Java实现互通的RSA&DES加解密算法

    RSA是由Ron Rivest、Adi Shamir和Leonard Adleman三位科学家提出的一种公钥加密技术。它的基本原理是基于大整数因子分解的困难性,即找到两个大素数的乘积很容易,但反向因子分解却非常困难。在RSA中,公钥用于加密...

    RSA2--》加签+加密+解密+验签

    本文将详细讲解RSA算法的加签、加密、解密以及验签的过程,结合Java语言来实现这一系列操作,并涉及到证书的使用。 首先,我们需要理解RSA算法的基本原理。RSA算法基于两个大素数的乘积难以分解这一数学难题,生成...

    C#与java平台RSA加密解密签名验签互通案例

    本案例聚焦于"C#与Java平台RSA加密解密签名验签互通"的问题,这涉及到两个主要的技术点:RSA加密算法和跨平台兼容性。下面将详细阐述这两个知识点。 首先,RSA是一种非对称加密算法,由Ron Rivest、Adi Shamir和...

    RSA.rar_java RSA_java 加密_rsa java_加密 java_设计文档

    这个RAR压缩包中包含了Java实现RSA加密/解密的相关文件,以及设计文档和说明文档,适合对Java编程和加密技术感兴趣的学习者或开发者。 1. RSA原理:RSA算法基于大数因子分解的困难性,由Ron Rivest、Adi Shamir和...

    rsa-des.rar_DES rsa_java res des加密通信_rsa_rsa通信_加密通信

    在这个"rsa-des.rar_DES rsa_java res des加密通信_rsa_rsa通信_加密通信"的资源中,我们主要探讨的是两种常见的对称与非对称加密算法——DES(Data Encryption Standard)和RSA(Rivest-Shamir-Adleman),以及它们...

    Java加密技术非对称加密算法RSA.doc

    Java加密技术非对称加密算法RSA.doc

    JAVA实现RSA加密解密

    这种加密技术在信息安全领域广泛应用,包括数据加密、数字签名等场景。在Java中实现RSA加密解密,可以帮助开发者保护敏感信息,例如在网络传输过程中防止数据被窃取。 首先,了解RSA的工作原理至关重要。它基于两个...

    Java 加密技术汇总

    ### Java 加密技术汇总 #### 一、概述 在当今高度数字化的世界中,信息安全变得尤为重要。Java作为一种广泛应用的编程语言,在处理数据加密方面提供了多种工具和技术。本文将深入探讨Java中常用的加密技术,包括...

    java base64 和RSA 加密解密

    Java中的Base64和RSA是两种常见的加密技术,它们在数据安全领域有着广泛的应用。Base64主要用于将二进制数据编码为可打印的ASCII字符,而RSA则是一种非对称加密算法,提供了更高的安全性。 Base64是一种简单的编码...

    java与oc使用rsa加密

    在Java和iOS(Objective-C)中实现RSA加密是跨平台安全通信的重要技术。本篇文章将详细探讨如何在Java和Objective-C中使用RSA加密,并提供相关的实践步骤。 1. RSA原理: RSA基于大数因子分解的困难性,它包括一对...

Global site tag (gtag.js) - Google Analytics