日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java 實現常見的非對稱加密算法

瀏覽:34日期:2022-08-20 17:33:29

概述

非對稱加密算法與對稱加密算法的主要差別在于非對稱加密算法用于加密和解密的密鑰不相同,非對稱加密算法密鑰分為公鑰和私鑰,公鑰加密只能用私鑰解密,反之私鑰加密只能用公鑰解密。相比對稱加密算法,非對稱加密算法加/解密效率低,但安全性高,這兩種算法一般結合使用。常見非對稱加密算法有RSA、ECC、Elgamal等。

使用RSA實現加密解密

公鑰加密,私鑰解密。

package com.ss.utils;import javax.crypto.Cipher;import java.security.KeyFactory;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.NoSuchAlgorithmException;import java.security.spec.PKCS8EncodedKeySpec;import java.security.spec.X509EncodedKeySpec;import java.util.Base64;import java.util.HashMap;import java.util.Map;public class RsaUtil { public static final String KEY_TYPE_PRIVATE_KEY = 'privateKey'; public static final String KEY_TYPE_PUBLIC_KEY = 'publicKey'; /** * 生成公鑰和私鑰 * * @return * @throws NoSuchAlgorithmException */ public static Map<String, String> generateKey() throws NoSuchAlgorithmException { Map<String, String> resultMap = new HashMap<>(); KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance('RSA'); KeyPair keyPair = keyPairGenerator.generateKeyPair(); Base64.Encoder encoder = Base64.getEncoder(); resultMap.put(KEY_TYPE_PRIVATE_KEY, encoder.encodeToString(keyPair.getPrivate().getEncoded())); resultMap.put(KEY_TYPE_PUBLIC_KEY, encoder.encodeToString(keyPair.getPublic().getEncoded())); return resultMap; } /** * RSA加密 * @param key * @param content * @param keyType * @return * @throws Exception */ public static String rsaEncrypt(String key, String content, String keyType) throws Exception { return rsa(key, content.getBytes(), keyType, Cipher.ENCRYPT_MODE); } /** * RSA解密 * @param key * @param content * @param keyType * @return * @throws Exception */ public static String rsaDecrypt(String key, String content, String keyType) throws Exception { return rsa(key, Base64.getDecoder().decode(content), keyType, Cipher.DECRYPT_MODE); } private static String rsa(String key, byte[] content, String keyType, int mode) throws Exception { Cipher cipher = Cipher.getInstance('RSA'); KeyFactory keyFactory = KeyFactory.getInstance('RSA'); if (KEY_TYPE_PRIVATE_KEY.equals(keyType)) { cipher.init(mode, keyFactory.generatePrivate(new PKCS8EncodedKeySpec(Base64.getDecoder().decode(key)))); } else { cipher.init(mode, keyFactory.generatePublic(new X509EncodedKeySpec(Base64.getDecoder().decode(key)))); } byte[] bytes = cipher.doFinal(content); return mode == Cipher.DECRYPT_MODE ? new String(bytes) : Base64.getEncoder().encodeToString(bytes); } public static void main(String[] args) throws Exception { String content = '大王叫我來巡山吶'; //生成密鑰對 Map<String, String> keyMap = generateKey(); System.out.println('私鑰:' + keyMap.get(KEY_TYPE_PRIVATE_KEY)); System.out.println('公鑰:' + keyMap.get(KEY_TYPE_PUBLIC_KEY)); //私鑰加密,公鑰解密 String privateKeyData = rsaEncrypt(keyMap.get(KEY_TYPE_PRIVATE_KEY), content, KEY_TYPE_PRIVATE_KEY); System.out.println('私鑰加密:' + privateKeyData); System.out.println('公鑰解密:' + rsaDecrypt(keyMap.get(KEY_TYPE_PUBLIC_KEY), privateKeyData, KEY_TYPE_PUBLIC_KEY)); //公鑰加密,私鑰解密 String publicKeyData = rsaEncrypt(keyMap.get(KEY_TYPE_PUBLIC_KEY), content, KEY_TYPE_PUBLIC_KEY); System.out.println('公鑰加密:' + publicKeyData); System.out.println('私鑰解密:' + rsaDecrypt(keyMap.get(KEY_TYPE_PRIVATE_KEY), publicKeyData, KEY_TYPE_PRIVATE_KEY)); }}

輸出

私鑰:MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDQPZnj0+/uh5jG0/rqVsXKLve7wTw2LVEwdBhm+SPrLoHYb4+6idNeF4bWgTqNRs2hfewq5cyiwXujT+eqp0g1ebSLWSUWzBsktynQMggxb8IwtnFYzmZX7BSAUudrfTre74RtKS0krYY5PCXCGR/EGbbXMVv1m2S59BrkWEI8c/iORhRAJ5/pqRW/51cIimPx9iTYx/QZC4VsCRi8ZrBaXcJhEi4Y/YzOFhfITID4ATis0Z3yw3FVybKzJo3Nexupcec5qaLBlwuDkY6E4NgQq51bjBCUB78RgXFLdaVtfBu9Vr7pRdqrh7sD//kpiicjiLJvmcLG9egXrkHRlm2TAgMBAAECggEAes75hM0mwOujBA9b+Pu3pedRHp91XRYYvZSaF5ByyG4jEXuprf8+ck05riOEXnEVMFpM/3eK2al1uviSzafeA/uEqHGoV+uDToHe3PPEtTMNuSC/c/o1jUCjTpKV/GRcZcGnvaD9CJZ1hCeetPuQKlxn4j0v2IcOPkRh36zVU0SZJKu5Ltt6iyGbpk6qqlpLnX93Ez5weWLnuolgjF34JBDQpc/zZjHwC8/avE81cJ3dUQR55l9QiwZUoMQ2eDWO1UcPAEqRssNAwEHbQJFSJmqtvg1yuSSvPIGB5ATPlTu7EoOLFMOQm3qoAxX7/FR9uU50wHivyZrRyKV4CdiLcQKBgQDuj6bh1WUQRIBU5ZOtljbs73RdYYbS1uUHubizQ3rqrNo3+TmaVu+7H3DPPI0L21YVpjXuPMUVkix+KA7HiDqULxx0yZMsdqXmggOT2QFEjGdueMFAJw09jAHnCIwuxmn3f94XAvV6N+Hfhjy31RGPQhjFGn6QQ16a3NI46CD6VwKBgQDfdorB9Wm0H6QJ8AYAQuHAiFJnXeOzN0q2407F5kx8XkAKwKaI7ybGZbiYESxFTe0AdVQlYRJbAby1iUW/OGOS+Ia5buzCo+BqrP6RxzLDYVClyXS3WFSLPKko6WIscS+uOF36mWWn34YYH/ktT8B/hUNFUD+PEctkrklONkZZJQKBgQCsn9hTbHYgKmFujV2qa5s9IhzjAZJs+MFsMLD9TuQf8opJnJdZHnWEw0B/RUKPBN0q90XpKaI3dLmrZFMlgWdaGSkPPVm4//YWcZgjIREwyCSEJO85+8gx9CDgTCgcJMlDJgzQO/zjvpI8i8deAtkc/+gqoHxa6dUIXKfmM9rBKwKBgFxIv0sUh5+8hWkZN9E5zbNOWQGZM6Tai791ph1yW1ntLnOCVgQtB41dits6FFdWtC7BRYveR89Pq1gpJaWvqueSPUktNxe2x8ImSUd4xU0Mzlp5FPt2vgt2dMGRiFqkL7W6T41jdija1az231fIHM5NAZgJaQYzqhSdKWbkYS8FAoGBAOciP4bEln64PnvuZtYnZNvt/5PHB4ssZ3S1WExyTtI7328ZKAsi3F7PjxCh7gviXfEI2t3AcVwpPaJYveL3Zg/jl2x6zNSLDW8kgNhAJE221u3pZefeidvIWwki/OXWtRqyoACteLnEb6lbM3tKdltWZOryQTiXqGdTluLEQLE0公鑰:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0D2Z49Pv7oeYxtP66lbFyi73u8E8Ni1RMHQYZvkj6y6B2G+PuonTXheG1oE6jUbNoX3sKuXMosF7o0/nqqdINXm0i1klFswbJLcp0DIIMW/CMLZxWM5mV+wUgFLna3063u+EbSktJK2GOTwlwhkfxBm21zFb9ZtkufQa5FhCPHP4jkYUQCef6akVv+dXCIpj8fYk2Mf0GQuFbAkYvGawWl3CYRIuGP2MzhYXyEyA+AE4rNGd8sNxVcmysyaNzXsbqXHnOamiwZcLg5GOhODYEKudW4wQlAe/EYFxS3WlbXwbvVa+6UXaq4e7A//5KYonI4iyb5nCxvXoF65B0ZZtkwIDAQAB私鑰加密:V9kG4o3nceI4a19t/V5431v9Ek1PiV3FZokfnRNBor/RBymwDX4rsGNHEYuyN6/sbbD56r3ij5tUpShXFlcHrzVH4IfD4ySbvNNeMs2FrZLF3zvQmwRKDPH6SJ0DEczi5N97Vfh4b2tfyLT8iX3t9LPWgEj5mB7MXiYPc56mza+ZAqDduxWWsm6Emm81uKn97wZnasg8zXlDbhRttVTWhszbDhrFqsgd2sb8ZZUZIuiGTaIg7U6Slc5x9uS3UVACXXVyMCmxiVutQtg3Z4kt80ruh7xO0hl4cWk6P2Tg0ncaIQn/5vKsO2UXr/EsCb2rchWN3ZBHTVyQ83v/EHDtQw==公鑰解密:大王叫我來巡山吶公鑰加密:aartOyClfEIz1JT5nghpTbXxLZEOovm+vwvg+u3Tw8t5LOF+C7Gg/uxUP8Hm5jEkN6JfBHaMWTKg0RQ2xf3CCuXcLIpYVCOUwADwd05E8guEfZBT8FIp8jghCz2j+lAIiTfGZvsK9qUdZEmwTAEjV6uP4avF6njriglGJ4KhcYXEO66tOJWe2nQ1hyYXEHS43h9F0dtlWDjF6Xr6wdmUALnhprHDwKPdT/1T8p7+M5Fz7fUC7TJulBHWCSZvhgl405PvN+iTv7VysBJKRPks1JnmMe6BxFyhxXZfNRHmUyQvTMSfWt/A5gOy8ao/SOwWv0QMSh5NbocSd/tpjn27kw==私鑰解密:大王叫我來巡山吶

使用RSA實現數字簽名

私鑰簽名,公鑰驗證。

package com.ss.utils;import java.security.*;import java.security.spec.PKCS8EncodedKeySpec;import java.security.spec.X509EncodedKeySpec;import java.util.Base64;import java.util.HashMap;import java.util.Map;public class SignatureUtil { public static final String KEY_TYPE_PRIVATE_KEY = 'privateKey'; public static final String KEY_TYPE_PUBLIC_KEY = 'publicKey'; /** * 生成公鑰和私鑰 * * @return * @throws NoSuchAlgorithmException */ public static Map<String, String> generateKey() throws NoSuchAlgorithmException { Map<String, String> resultMap = new HashMap<>(); KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance('RSA'); KeyPair keyPair = keyPairGenerator.generateKeyPair(); Base64.Encoder encoder = Base64.getEncoder(); resultMap.put(KEY_TYPE_PRIVATE_KEY, encoder.encodeToString(keyPair.getPrivate().getEncoded())); resultMap.put(KEY_TYPE_PUBLIC_KEY, encoder.encodeToString(keyPair.getPublic().getEncoded())); return resultMap; } /** * 私鑰簽名 * @param privateKeyStr * @param content * @return * @throws Exception */ public static String generateSignature(String privateKeyStr, String content) throws Exception { KeyFactory keyFactory = KeyFactory.getInstance('RSA'); Signature signature = Signature.getInstance('SHA1withRSA'); PrivateKey privateKey = keyFactory.generatePrivate(new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKeyStr))); signature.initSign(privateKey); signature.update(content.getBytes()); return Base64.getEncoder().encodeToString(signature.sign()); } /** * 公鑰驗證 * @param publicKeyStr * @param content * @param sign * @return * @throws Exception */ public static boolean verifySignature(String publicKeyStr, String content, String sign) throws Exception { KeyFactory keyFactory = KeyFactory.getInstance('RSA'); Signature signature = Signature.getInstance('SHA1withRSA'); PublicKey publicKey = keyFactory.generatePublic(new X509EncodedKeySpec(Base64.getDecoder().decode(publicKeyStr))); signature.initVerify(publicKey); signature.update(content.getBytes()); return signature.verify(Base64.getDecoder().decode(sign)); } public static void main(String[] args) throws Exception { String content = '大王叫我來巡山吶'; //生成密鑰對 Map<String, String> keyMap = generateKey(); //私鑰簽名 String sign = generateSignature(keyMap.get(KEY_TYPE_PRIVATE_KEY), content); System.out.println('私鑰簽名:' + sign); //公鑰驗證 boolean verifyResult = verifySignature(keyMap.get(KEY_TYPE_PUBLIC_KEY), content, sign); System.out.println('公鑰驗證:' + verifyResult); //將內容做下修改,再進行公鑰驗證 boolean verifyResult2 = verifySignature(keyMap.get(KEY_TYPE_PUBLIC_KEY), content + '啦啦啦啦', sign); System.out.println('公鑰驗證:' + verifyResult2); }}

輸出

私鑰簽名:XDWeOUVZhXNPl58mcmRK8ht9TAhnREc+NlnSs2b6PCJuj29ABuoXsjZeJqSspGw8hm9ckHVSTrUt8pX4BFBFzrINDRBsx3TdLp2L8nMkhjFUfo0qcyZo8ReEGFCNr0ergkq2W1Me/5W40GrQz4cJcQ4KV/QWzD8YHWcnDvKg9Q0nXJSngyhJTzUB8o/pgo/tmkA9+bWW212UD9nzEXu5aoPEcYyoo3iFWRX5o9Jgg6ZF+exmWizwZHkg4eD1zC5IN3m4yRS6GRbnZInEuDsOMp9W7HouDLUirkFZiSkyW+DVto+L6CE5eNBrWC52zxiNkVBlkyYKOatSpcrQrtnyiQ==公鑰驗證:true公鑰驗證:false

以上就是Java 實現常見的非對稱加密算法的詳細內容,更多關于Java 非對稱加密算法的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品少妇一区| 美女av在线免费看| 日韩av在线免费观看不卡| 国产精品99视频| 亚洲精品进入| 石原莉奈一区二区三区在线观看| 日本不卡视频在线观看| 国产免费成人| 亚洲福利专区| 国精品产品一区| 国产高清精品二区| 777久久精品| 国产香蕉精品| 国产欧美日韩在线观看视频| 亚洲三级网站| 天堂va欧美ⅴa亚洲va一国产| 免费欧美在线视频| 亚洲国内精品| 久久国产精品久久w女人spa| 日韩视频一区| 亚洲人成亚洲精品| 亚久久调教视频| 日本v片在线高清不卡在线观看| 日韩精品一级中文字幕精品视频免费观看 | 国产精品亚洲欧美日韩一区在线| 男女男精品网站| 97精品在线| 欧美 日韩 国产一区二区在线视频| 中文字幕色婷婷在线视频| 秋霞国产精品| 免费在线看一区| 日本va欧美va欧美va精品| 91麻豆精品| 麻豆视频在线观看免费网站黄| 最近高清中文在线字幕在线观看1| 亚洲天堂资源| 老司机久久99久久精品播放免费| 日韩高清不卡在线| 波多视频一区| 亚洲日本久久| 欧美成人基地 | 亚洲精品一区三区三区在线观看| 国产一区日韩欧美| 欧美综合精品| 国产一区久久| 久久香蕉网站| 日韩中文字幕一区二区三区| 免费成人av在线播放| 久久精品国产999大香线蕉| 一区二区三区视频免费观看 | 国产精品久久久久久久久妇女| 婷婷丁香综合| 国产精品二区不卡| 亚洲一区二区三区在线免费| 国产一区二区三区不卡av| 亚洲日韩视频| 伊人久久亚洲美女图片| 免费在线亚洲欧美| 爽好久久久欧美精品| 欧美激情三区| 制服诱惑一区二区| 黄色aa久久| 美女久久99| 国产亚洲字幕| 午夜亚洲福利| 蜜乳av另类精品一区二区| 欧美日韩中文一区二区| 91亚洲国产成人久久精品| 国产乱子精品一区二区在线观看| 久久国产精品99国产| 久久精品亚洲人成影院| 国产专区精品| 日韩av专区| 日韩.com| 精品亚洲美女网站| 久久亚洲人体| 欧美国产先锋| 久久久久黄色| 中文字幕在线视频久| 国产成人精品亚洲线观看| 国产精品资源| 精品香蕉视频| 韩国久久久久久| 成人久久一区| 999国产精品| 日韩在线短视频| 中文字幕高清在线播放| 99久久久国产精品美女| 亚洲大全视频| 视频一区二区中文字幕| 亚洲免费福利一区| 亚洲综合五月| 久久国内精品自在自线400部| 欧美精品福利| 卡一卡二国产精品| av一区在线| 亚洲狼人精品一区二区三区| 日本欧美大码aⅴ在线播放| 欧美一级二区| 成人久久一区| 亚洲天堂日韩在线| 老司机精品视频网| 亚洲精品91| 国产亚洲久久| 国产精品99一区二区| 7777精品| 国产色播av在线| 中日韩男男gay无套| 麻豆国产精品视频| 日韩精品一区第一页| 久久久久观看| 久久香蕉精品| 首页国产精品| 天堂精品久久久久| 久久精品导航| 日本精品另类| 天堂8中文在线最新版在线| 三级在线观看一区二区 | 欧美精品一区二区三区精品| 亚洲三级网站| 欧美一区二区三区激情视频 | 肉色欧美久久久久久久免费看 | 日韩免费av| 免费人成在线不卡| 日韩毛片视频| 国产精品啊v在线| 天堂av一区| 亚洲一二三区视频| 国产色综合网| 国产精品国产一区| 国产精品一区二区免费福利视频| 尹人成人综合网| 国产一区久久| 亚洲欧美一区在线| 国产不卡人人| 青青久久av| 超级白嫩亚洲国产第一| 国产在线观看91一区二区三区| 日韩高清电影一区| 亚久久调教视频| 日韩动漫一区| 久久激情五月婷婷| 91精品福利观看| 国产精品一线| 欧美一级二区| 国产另类在线| 美女视频免费精品| 精品欧美视频| 久久夜夜操妹子| 欧美成人精品| 国产精品日韩久久久| 亚洲精品观看| 欧美激情精品| 欧美日韩免费观看视频| av一区在线| 在线观看亚洲精品福利片| 日韩精品三级| 卡一精品卡二卡三网站乱码| 麻豆理论在线观看| 久久精品影视| 在线观看视频免费一区二区三区| 亚洲啊v在线免费视频| 日韩精品第二页| 精品三级av在线导航| 欧美福利一区| 国产精品久久久久久久久久久久久久久 | 在线精品一区| 欧美国产中文高清| 久久九九电影| 麻豆精品在线视频| 免费欧美在线视频| 粉嫩av一区二区三区四区五区| 午夜在线精品偷拍| 欧美午夜精彩| 国产精品久久久久av蜜臀| 日韩视频中文| 日韩大片在线播放| 国产精品中文字幕亚洲欧美| 人人精品亚洲| 欧美精品二区| 日韩精品一二三四| 日韩欧美自拍| 久久99青青| 国产尤物精品| 国产精品成人自拍| 视频一区视频二区中文| 国产高清日韩| 久久国产婷婷国产香蕉| 成人精品中文字幕| 日本蜜桃在线观看视频| 视频一区二区不卡| 色偷偷色偷偷色偷偷在线视频| 91日韩欧美| 精品视频高潮| 蘑菇福利视频一区播放| 国产精品久久久久久久免费软件| 亚洲a成人v| 欧美日韩在线网站| 免费日韩成人| 鲁大师成人一区二区三区|