java非对称加密算法(java代码大全及详解)

我们在做技术接口时,尤其对外提供时,为了提高服务接口的安全(防爆破,防重放,防篡改等)一般会采用接口验证的方式,但是在验证的时候为了提升参数请求前后的安全,我们会采用加密。普通加密基本都是对称的,不能逆向。 下面,我介绍一种RSA的算法,通过这个加密算法实现接口请求前后的数字签名验证。具体实现流程为: 接口数字签名验证的而基本流程 下面我将RSA的签名算法代码分享下,下载即用: publiccla…

我们在做技术接口时,尤其对外提供时,为了提高服务接口的安全(防爆破,防重放,防篡改等)一般会采用接口验证的方式,但是在验证的时候为了提升参数请求前后的安全,我们会采用加密。普通加密基本都是对称的,不能逆向。

下面,我介绍一种RSA的算法,通过这个加密算法实现接口请求前后的数字签名验证。具体实现流程为:Java中数字签名,非对称加密实现方式

接口数字签名验证的而基本流程

下面我将RSA的签名算法代码分享下,下载即用:

public class RSAEncrypt {


    private static Map<Integer, String> keyMap = new HashMap<Integer, String>();  //用于封装随机产生的公钥与私钥

    private static String pirvateKey=\"MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEAgS8Vf8eKVf9YoqoyhFy4hHgYpNkSkrrmkJrfrKeZHfZWFx2cCoon74QZ3qw15VV9jMD5DWaPdMVAVx5HckNURwIDAQABAkBpS6Fwd4pwMiNi4usuLA1SHDmqFC0pYCISd8odBratTjRv6w9OH+A/CIKDir4DZ0PsS9qh0mxb0bthRQ9vS0wBAiEAx+y2VcrbnOZNQSWUONZcVKIHazkrAWXOBR8mQfJnOUcCIQClavCvg0SesKWv65vs2ZR0quQnaFdcCMh7B4GM2DCNAQIgAsXgvY3jv+hd1/J6fNNUUoQw0Cbp1sofsmh9Mlr3XY8CIFEyGex9Cay/VsTwaLws3PMbgxxY2jDB2u6Q86VX5RUBAiBhoiUOYrxrS77ifDFm1KYFHRPyZNStYJhcVu4U5kwwIA==\";
    private static String publicKey=\"MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAIEvFX/HilX/WKKqMoRcuIR4GKTZEpK65pCa36ynmR32VhcdnAqKJ++EGd6sNeVVfYzA+Q1mj3TFQFceR3JDVEcCAwEAAQ==\";
    private static String ssb=\"fSAUUCYm3FI3EYJWZRPXnI1dbwcLT3bFUqL5Wsdv24QtLmYmrN2i5WRKQgGxMTewRJ78Obf1Zke9rTpE+23zzw==\";

    public static void main(String[] args) throws Exception {
        //生成公钥和私钥
        //genKeyPair();
        //String randomStr= RandomStrUtil.getRandom(24, RandomStrUtil.TYPE.LETTER_CAPITAL_NUMBER);
        String uuid=UUIDUtil.getUUID();
        String hashCode=String.valueOf(uuid.hashCode());
        System.out.println(\"hashcode=\"+hashCode);
        long time=System.currentTimeMillis();
        //System.out.println(\"随机hash\"+hashCode);
        //加密字符串
        String message = time+\"@=@\"+uuid;
        //System.out.println(\"随机生成的公钥为:\" + publicKey);
        //System.out.println(\"随机生成的私钥为:\" + pirvateKey);
        String messageEn = encrypt(message,publicKey);
        System.out.println(\"加密后的字符串为:\" + messageEn);
        String messageDe = decrypt(messageEn,pirvateKey);
        System.out.println(\"源文数据=\"+message);
        System.out.println(\"解密数据=\" + messageDe);

        String bs=messageDe.split(\"@=@\")[1];
        System.out.println(bs);
    }
    /**
     * 随机生成密钥对
     * @throws NoSuchAlgorithmException
     */
    public static void genKeyPair() throws NoSuchAlgorithmException {
        // KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象
        KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(\"RSA\");
        // 初始化密钥对生成器,密钥大小为96-1024位
        keyPairGen.initialize(1024,new SecureRandom());
        // 生成一个密钥对,保存在keyPair中
        KeyPair keyPair = keyPairGen.generateKeyPair();
        // 得到私钥
        RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
        // 得到公钥
        RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();

        String publicKeyString = new String(Base64.encodeBase64(publicKey.getEncoded()));
        System.out.println(\"公钥=\"+publicKeyString);
        // 得到私钥字符串
        String privateKeyString = new String(Base64.encodeBase64((privateKey.getEncoded())));
        System.out.println(\"私钥=\"+privateKeyString);
        // 将公钥和私钥保存到Map
        //0表示公钥
        keyMap.put(0,publicKeyString);
        //1表示私钥
        keyMap.put(1,privateKeyString);
    }
    /**
     * RSA公钥加密
     *
     * @param str
     *            加密字符串
     * @param publicKey
     *            公钥
     * @return 密文
     * @throws Exception
     *             加密过程中的异常信息
     */
    public static String encrypt( String str, String publicKey ) throws Exception{
        //base64编码的公钥
        byte[] decoded = Base64.decodeBase64(publicKey);
        RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance(\"RSA\").generatePublic(new X509EncodedKeySpec(decoded));
        //RSA加密
        Cipher cipher = Cipher.getInstance(\"RSA\");
        cipher.init(Cipher.ENCRYPT_MODE, pubKey);
        String outStr = Base64.encodeBase64String(cipher.doFinal(str.getBytes(\"UTF-8\")));
        return outStr;
    }
    /**
     * RSA私钥解密
     *
     * @param str
     *            加密字符串
     * @param privateKey
     *            私钥
     * @return 铭文
     * @throws Exception
     *             解密过程中的异常信息
     */
    public static String decrypt(String str, String privateKey) throws Exception{
        //64位解码加密后的字符串
        byte[] inputByte = Base64.decodeBase64(str.getBytes(\"UTF-8\"));
        //base64编码的私钥
        byte[] decoded = Base64.decodeBase64(privateKey);
        RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance(\"RSA\").generatePrivate(new PKCS8EncodedKeySpec(decoded));
        //RSA解密
        Cipher cipher = Cipher.getInstance(\"RSA\");
        cipher.init(Cipher.DECRYPT_MODE, priKey);
        String outStr = new String(cipher.doFinal(inputByte));
        return outStr;
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年5月18日 上午11:35
下一篇 2022年5月18日 下午6:42

相关推荐

  • 微办公平台怎么样(微办公平台品牌介绍)

    DoNews5月31日消息(记者翟继茹)在本届数博会上,奇鱼微办公作为为数不多聚焦移动办公领域的企业参加了本届数博会。与传统移动办公平台相对比,奇鱼办公副总裁黄喆介绍奇鱼的优势在于AI智能化和一体化链接企业大数据。 2015年是中国移动办公领域的“爆发之年”,奇鱼微办公也是在这一年加入激烈的竞争中。2015年4月,微办公首次提出一体化移动办公平台离线,正式推出客户管理(CRM)系统。同年11月推出…

    2022年5月3日
    880
  • 怎么弄小程序,自制小程序教程

    大家有在用小程序吗?自己有想做一个属于自己的小程序吗?今天教大家15分钟就能做好一个小程序。 利用上线了免费制作:https://www.sxl.cn/ 1、填写好基本信息,然后点击立刻免费建站。 2、选择要建立的小程序类型 3、这里选择展示,然后会打开对应的模板,然后根据自己想要的进行展示即可! 4、按照向导进行编辑修改即可 编辑好后可以进行预览查看 5、然后绑定微信小程序,发布即可。

    2022年7月1日
    580
  • 创业失败的案例分析,找出创业失败的原因是什么

    大数据文摘作品,转载请注明来源 编译|yawei,小浪,蒋宝尚,ChrisQiu 从缺乏产品与市场的相配到团队成员的不和,通过分析101个创业失败案例,我们总结了创业失败的前20大原因。 在我们列出创业失败案例清单后,我们收到最频繁的请求之一是我们能否从这些失败案例中提取出他们创业失败的原因。创业者、投资者、经济发展人员、学者和企业都希望对这个问题有所了解: 有没有一些主要原因导致创业失败呢? 所…

    2022年7月16日
    1060
  • 女士创业有哪些好项目,适合女性投资项目推荐

    (微商世界网)2019适合女生创业项目有哪些?随着时代的发展,广大女性的事业心是越来越强了,生活中也不乏许多女性创业成功的案例。很快进入到2019年中旬了,在这里,如果你有一颗想创业的心,心动不如行动,现在就可以开始计划起来。下面是小编为大家推荐3种适合女性创业项目内容供大家参考。 美容店 说到女性创业排行榜,第一个想到的就是美容店。女为悦己者容,这句话说的不无道理。随着国民生活指数的提高,女性对…

    2022年5月18日
    840
  • 什么机箱好看实用,五款个性炫酷机箱推荐

    对于攒机的玩家,机箱的选购一定要谨慎,除了看清机箱的尺寸是否合适自己买的硬件外设,机箱自带的外观颜值也会让玩家有更好的攒机体验,接下来笔者给大家推荐几款笔者觉得不错的机箱,大家可以参考一下。 航嘉MVPAwaken觉醒是航嘉推出的专业电竞机箱,双面钢化玻璃,稳定坚固同时有有着时尚美感,现在京东售价399元,还有满100元,可减10元的优惠活动。有兴趣的用户可以关注下。 航嘉MVPAwaken觉醒 …

    2022年9月11日
    2320
  • 跨界营销是什么,十大经典跨界营销案例

    现在品牌竞争越来越,跨界营销对于品牌来说是强强联合的好机会。它可以扩大品牌的市场范围,树立品牌年轻化。今年上半年出现了很多优秀的跨界营销案例,我们来一睹为快吧? 1最唯美:路虎与国家地理 近期路虎与国家地理推出了要怎么证明我存在广告。广告中展示了国家地理探索六大地形:奇异末路、红岩赛道、死亡之海、雪白之境、绿色净土、奇绝孤峰。画面中,路虎一路驰骋在唯美的地理中。让消费者不仅了解了大自然的美丽,也顺…

    2022年5月19日
    940
  • 创业扶持政策是怎么样的,2019国家创业补贴新政策一览

    昨日,2019年中央一号文件正式公布,不出所料这次的红头文件再次围绕“三农”展开。今天我们要重点关注的,是此次一号文件对于创业的支持。 文件第四部分第六点写道:鼓励外出农民工、高校毕业生、退伍军人、城市各类人才返乡下乡创新创业,支持建立多种形式的创业支撑服务平台,完善乡村创新创业支持服务体系。 那么,今年哪些创业方向是国家重点鼓励的呢?土地论坛为大家作了梳理: 创业方向①县域产业链 过去多年来,我…

    2022年5月19日
    690
  • 有哪些创业qq群,教你如何利用qq群月赚千元

    QQ群对于大多数人来说只是一个交流工具,加的群多了,还会选择屏蔽一些暂时没用的群。这些看似不起眼的群,也能成为赚钱的工具。内容创业时代来临,QQ群也开放了付费加群功能。为虚拟资源付费是网络赚钱项目的新风口,其中付费QQ群就是一个不错的项目。 创建一个付费QQ群并不难,难的是要做哪一个方面的付费群,又该如何来运营,对此好多人毫无头绪。今天,我们就来介绍如何付费QQ群的操作方案。 一、定位 首先,这个…

    2022年5月19日
    1300
  • 团队总结与规划总结PPT(2020年销售团队总结ppt下载)

    完整版团队管理101招PPT,企业管理者拿来作为团队培训、员工入职培训、管理者提升、参考素材,欢迎收藏

    2022年10月20日
    1910
  • 什么叫网站优化,网站优化的真正含义介绍

    收录收录收录!有收录才会有关键词,有关键词才会有排名,有排名才会有流量,有流量才会有客户,有客户啊,有客户啊。所有这些的基础要先做SEO,做网站优化才会有。 关于SEO每个人有每个人的看法,因为SEO的历史并不算长 百度解释:SEO是指在了解搜索引擎自然排名机制的基础上,对网站进行内部及外部的调整优化,改进网站在搜索引擎中关键词的自然排名,获得更多流量,吸引更多目标客户,从而达到网络营销及品牌建设…

    2022年8月30日
    420

发表回复

登录后才能评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信