电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:6日期: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
相關文章:
主站蜘蛛池模板: 耐酸碱胶管_耐腐蚀软管总成_化学品输送软管_漯河利通液压科技耐油耐磨喷砂软管|耐腐蚀化学软管 | 广州昊至泉水上乐园设备有限公司 | 玖容气动液压设备有限公司-气液增压缸_压力机_增压机_铆接机_增压器 | 企典软件一站式企业管理平台,可私有、本地化部署!在线CRM客户关系管理系统|移动办公OA管理系统|HR人事管理系统|人力 | 山东led显示屏,山东led全彩显示屏,山东LED小间距屏,临沂全彩电子屏-山东亚泰视讯传媒有限公司 | 吊篮式|移动式冷热冲击试验箱-二槽冷热冲击试验箱-广东科宝 | 天津次氯酸钠酸钙溶液-天津氢氧化钠厂家-天津市辅仁化工有限公司 | 河南中专学校|职高|技校招生-河南中职中专网| 底部填充胶_电子封装胶_芯片封装胶_芯片底部填充胶厂家-东莞汉思新材料 | 恒湿机_除湿加湿一体机_恒湿净化消毒一体机厂家-杭州英腾电器有限公司 | BAUER减速机|ROSSI-MERSEN熔断器-APTECH调压阀-上海爱泽工业设备有限公司 | 定制奶茶纸杯_定制豆浆杯_广东纸杯厂_[绿保佳]一家专业生产纸杯碗的厂家 | 整合营销推广|营销网络推广公司|石家庄网站优化推广公司|智营销 好物生环保网、环保论坛 - 环保人的学习交流平台 | 打包箱房_集成房屋-山东佳一集成房屋有限公司 | 布袋除尘器|除尘器设备|除尘布袋|除尘设备_诺和环保设备 | 碳纤维复合材料制品生产定制工厂订制厂家-凯夫拉凯芙拉碳纤维手机壳套-碳纤维雪茄盒外壳套-深圳市润大世纪新材料科技有限公司 | 合肥防火门窗/隔断_合肥防火卷帘门厂家_安徽耐火窗_良万消防设备有限公司 | 升降机-高空作业车租赁-蜘蛛车-曲臂式伸缩臂剪叉式液压升降平台-脚手架-【普雷斯特公司厂家】 | 万濠影像仪(万濠投影仪)百科-苏州林泽仪器 | 昆山PCB加工_SMT贴片_PCB抄板_线路板焊接加工-昆山腾宸电子科技有限公司 | 中国品牌排名投票_十大品牌榜单_中国著名品牌【中国品牌榜】 | app开发|app开发公司|小程序开发|物联网开发||北京网站制作|--前潮网络 | 北钻固控设备|石油钻采设备-石油固控设备厂家 | 标准件-非标紧固件-不锈钢螺栓-非标不锈钢螺丝-非标螺母厂家-三角牙锁紧自攻-南京宝宇标准件有限公司 | 碳纤维布-植筋胶-灌缝胶-固特嘉加固材料公司 | 蜂窝块状沸石分子筛-吸附脱硫分子筛-萍乡市捷龙环保科技有限公司 | 河北凯普威医疗器材有限公司,高档轮椅系列,推车系列,座厕椅系列,协步椅系列,拐扙系列,卫浴系列 | 谷梁科技 | 办公室装修_上海办公室设计装修_时尚办公新主张-后街印象 | 柴油发电机组_柴油发电机_发电机组价格-江苏凯晨电力设备有限公司 | 中细软知识产权_专业知识产权解决方案提供商 | 球盟会·(中国)官方网站 | 广州食堂承包_广州团餐配送_广州堂食餐饮服务公司 - 旺记餐饮 | 日本SMC气缸接头-速度控制阀-日本三菱伺服电机-苏州禾力自动化科技有限公司 | 无痕胶_可移胶_无痕双面胶带_可移无痕胶厂家-东莞凯峰 | 万濠投影仪_瑞士TRIMOS高度仪_尼康投影仪V12BDC|量子仪器 | 长沙广告公司|长沙广告制作设计|长沙led灯箱招牌制作找望城湖南锦蓝广告装饰工程有限公司 | 飞飞影视_热门电影在线观看_影视大全 | 冷镦机-多工位冷镦机-高速冷镦机厂家-温州金诺机械设备制造有限公司 | 变频器维修公司_plc维修_伺服驱动器维修_工控机维修 - 夫唯科技 变位机,焊接变位机,焊接变位器,小型变位机,小型焊接变位机-济南上弘机电设备有限公司 | 进口便携式天平,外校_十万分之一分析天平,奥豪斯工业台秤,V2000防水秤-重庆珂偌德科技有限公司(www.crdkj.com) |