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

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

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

瀏覽:35日期: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久久,三上悠亚国产精品一区二区三区
日韩精选在线| 91精品福利观看| 国产精品亚洲产品| 日本va欧美va精品发布| 日韩欧美四区| 国产欧美久久一区二区三区| 国产精品亚洲综合久久| 国产精品115| 免费一级欧美片在线观看网站| 国产麻豆一区| 欧美激情福利| 日韩一区欧美| 亚洲手机在线| 日韩中文字幕av电影| 久久国内精品视频| 国产成人77亚洲精品www| 夜鲁夜鲁夜鲁视频在线播放| 国产精品美女久久久| 日韩精品一区二区三区免费视频 | 成人免费电影网址| 久久都是精品| 免费在线亚洲| 亚洲第一区色| 日韩综合一区二区| 成人国产精品一区二区网站| 亚洲夜间福利| 麻豆久久一区| 久久av一区二区三区| 久久精品国产免费| 老司机精品久久| 精品国产一区二区三区2021| 亚洲一区欧美二区| 黄色在线观看www| 日韩精品亚洲专区在线观看| 色婷婷精品视频| 国产精品久久国产愉拍| 99国产精品久久久久久久成人热 | 亚洲精品网址| 精品少妇av| 欧美日韩a区| 在线观看一区| 一区福利视频| 成人av二区| 精精国产xxxx视频在线播放| 欧美日韩一区二区三区在线电影| 欧美女激情福利| 成人欧美一区二区三区的电影| 日韩在线观看一区二区三区| 红桃视频欧美| 日韩一区二区免费看| 激情综合网址| 日本在线高清| 成人精品国产亚洲| 欧美精品不卡| 国产精品白丝久久av网站| 首页亚洲欧美制服丝腿| 午夜精品一区二区三区国产| 婷婷成人在线| 亚洲一级特黄| 国精品一区二区三区| 久久亚洲成人| 欧美日韩国产亚洲一区| 激情丁香综合| 五月婷婷亚洲| 国产精品91一区二区三区| 欧美影院三区| 激情婷婷欧美| 欧美+日本+国产+在线a∨观看| 成人自拍av| 国产毛片久久| 国产丝袜一区| 高清在线一区| 婷婷色综合网| 日本综合精品一区| 麻豆视频一区| 国产在线欧美| 午夜久久av| 精品国产一区二区三区av片| 亚洲国内欧美| 亚洲精品麻豆| 97精品国产一区二区三区 | 天堂av在线一区| 日韩精品一级| 国产va免费精品观看精品视频| av资源中文在线| 国产一区导航| 麻豆国产欧美日韩综合精品二区| 亚洲天堂av影院| 日本一区免费网站| bbw在线视频| 亚洲香蕉视频| 欧洲亚洲一区二区三区| 中文一区一区三区免费在线观 | 日本欧洲一区二区| 国产精品手机在线播放| 亚洲手机在线| 免费在线欧美黄色| 在线视频免费在线观看一区二区| 国产精品久久国产愉拍| 自由日本语亚洲人高潮| 国产一区日韩| 久久国产影院| 野花国产精品入口| 久久国产日韩欧美精品| 国产毛片精品久久| 久久久久网站| 精品欧美视频| 国产精品网在线观看| 日本大胆欧美人术艺术动态| 成人羞羞视频播放网站| 日韩av资源网| 老牛影视一区二区三区| 国产99久久| 在线手机中文字幕| 欧美激情三区| 欧美激情视频一区二区三区免费 | 最近高清中文在线字幕在线观看1| 亚洲精品国产日韩| 美女国产一区| 黄色精品网站| 亚洲激情五月| 伊人影院久久| 免费在线小视频| 91欧美日韩| 成人在线视频中文字幕| 精品国产美女a久久9999| 国产精品白丝av嫩草影院| 日本午夜精品久久久久| 亚洲欧美在线综合| 蜜桃av一区二区三区电影| 亚洲免费在线| 99国产精品| 丝瓜av网站精品一区二区| 美国欧美日韩国产在线播放| 一区二区三区午夜视频| 自拍自偷一区二区三区| 亚洲精品人人| 日本中文字幕一区二区| 欧美日韩xxxx| 国产一区二区三区视频在线| 国产精品久久久久久久免费观看| 精品视频免费| 欧美aa在线观看| aa国产精品| 日本欧美一区二区| 欧美a在线观看| 久久久久久久久99精品大| 日韩视频一区| 日韩高清电影一区| 精品久久不卡| 欧美日韩在线观看视频小说| 欧美特黄一级| 亚洲一区二区小说| 久久99青青| 亚洲精品2区| 国产精品红桃| 激情欧美丁香| 麻豆一区二区在线| 国产一区欧美| 国产精品成人国产| 精品欧美激情在线观看| 国产亚洲欧美日韩精品一区二区三区| 国产一区不卡| 日韩精彩视频在线观看| 一本大道色婷婷在线| 亚洲综合欧美| 欧美日韩国产观看视频| 蜜桃一区二区三区在线| 黄色精品视频| 亚洲a级精品| 久久婷婷激情| 久久中文字幕一区二区| 中文亚洲免费| 日韩精品一区二区三区免费观影| 欧美在线观看天堂一区二区三区| 在线一区免费| 久久久成人网| 久久99影视| 欧美伊人影院| 亚洲综合中文| 美女精品网站| 国产日韩专区| 婷婷综合六月| 久久亚洲人体| 国产欧美日韩精品高清二区综合区| 久久亚洲影院| 亚洲一区亚洲| 日韩一级网站| 伊人久久亚洲影院| 亚洲黄色影院| 蜜桃视频一区二区| 乱人伦精品视频在线观看| 久久国产精品99国产| 一本一道久久a久久精品蜜桃| 欧美性感美女一区二区| 韩日一区二区三区| 一区在线视频观看| 免费精品国产| 午夜精品网站| 日本不卡高清视频|