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

相关推荐

  • 网页看视频没声音怎么回事(教你一招快速排查其中原因)

    许多人看视频的时候都是在网页上直接观看,简单方便,只是有的用户遇到了网页看视频没有声音的情形,这是怎么回事?应该怎么解决呢? 先看看是不是关闭了网页的声音。像是360浏览器在右下角有个小喇叭,可以打开或关闭网页的声音。 如果不是的话,就查一查是否是电脑音频设置问题,或是驱动问题引起的。 (1)首先检查任务栏右侧有无“小喇叭”。假如有,则声卡正常,故障原因可可以是系统声音太小,或设置了静音,或音箱故…

    2022年9月17日
    750
  • 会员营销的模式是什么,会员充值经典案例分析

    移动互联网的不断发展,营销的方式呈现出多元化的一种状态。传统的营销方式对商家而言已经很难奏效了。会员营销的出现打破了这一僵局。那么会员营销具备什么样的优势呢? 第一步 登陆会员卡系统后台,选择⽀付即会员。设置后⽤户微信⽀付后⾃动为⽤户发送⼀条领卡消息,⽤户点击消息即可领取会员卡。 第二步 可以在会员卡的基础设置中设置积分商城,⽤户点击“会员中⼼”后也可看到“积分商城”并使⽤。 第三步 登陆会员卡系…

    2022年5月19日
    790
  • 电商模式有哪几种,电子商务5种盈利模式

    淘宝网 淘宝网是亚太地区较大的网络零售、商圈,由阿里巴巴集团在2003年5月创立。淘宝网是中国深受欢迎的网购零售平台,拥有近5亿的注册用户数,每天有超过6000万的固定访客,同时每天的在线商品数已经超过了8亿件,平均每分钟售出4.8万件商品。 截止2011年年底,淘宝网单日交易额峰值达到43.8亿元,创造270.8万直接 且充分就业机会。随着淘宝网规模的扩大和用户数量的增加,淘宝也从单一的C2C网…

    2022年6月12日
    1230
  • 如何进行品牌定位,品牌定位的核心与思路

    品牌定位就是战略定位,其决定产品和企业的赢取市场的关键。 今天,农业君给各位农业人分享一下农产品品牌如何通过定位赢得市场,并且梳理外界疯传的品牌定位10大高招,以供参考! 1.第一名定位 就是强调自己的企业或产品,处于同行业中的领导地位,利用消费者的从众心理,来占领消费者的心智。比如,我们经常看到很多企业在广告中宣传自己“市场占有率第一”“销售量第一”“冠军品质”等等。 比如,百威啤酒就宣称自己是…

    2022年8月12日
    470
  • ps修改衣服颜色有哪些方法,ps给衣服换颜色详细步骤

    不喜欢照片中模特裙子的颜色,用摄影修图软件怎么换色? 给照片中模特的裙子换色,这个在好早之前,为朋友们分享过。今天咱们来温习一下。手机就可以实现,还可以无损导出。看一下效果图和原图吧,后面有详细的操作步骤。 裙子换色之后的图一: 原图: 裙子换色之后的图二: 裙子换色之后的图三: 用手机修图软件,为照片中模特的裙子换色,操作步骤: 1、用手机修图软件Snapseed打开要调节裙子颜色的照片。 2、…

    2022年7月18日
    550
  • seo零基础入门教程,seo自学需要多久

    SEO优化是一件相当复杂的事情,作为一个SEO人员刚开始的时候不知道具体做哪些事情?今天作为一个过来人的壹壹汇聚网站推广服务小编帮大家整理了一份SEO教程的10大框架,从10个维度讲解下SEO的奥秘! 1.准备一个空间和域名 SEO有很多概念性名词,当然这些都是要进行记忆的,但不推荐大家去死记硬背,而是需要在实践中(操作网站优化时)去记忆,因为死记硬背很容易忘记,并且自己也不会真正理解其中的含义。…

    2022年7月26日
    670
  • thinkpad轻薄本哪个好,thinkpad轻薄笔记本排行

    笔记本市场上,轻薄化已经是全面的发展方向,无论是传统笔记本、还是商用笔记本,甚至是游戏本,都已很难见到厚重型的样子。以往轻薄型笔记本往往给人性能孱弱的印象,但在2018年,有一款轻薄本的性能,却向游戏本看齐,轻薄机身蕴含澎湃能量,它就是ThinkPad X1隐士。 ThinkPadX1隐士 ThinkPad X1旗舰系列一直以极致的平衡之道,深得中高端用户家的青睐,可谓是商用笔记本的代表。今年9月…

    2022年8月27日
    470
  • 怎么去除pdf的水印,试试这个方法帮助你快速消除pdf水印

    在职场办公中,我们通常会遇到一些带水印的文件,这些水印有的是图片,有的是文字。 就拿PDF文件来说,防止内容被他人窃取,想要在PDF文件里添加水印,你还在想尽各种办法吗? 今天就来教大家两种方法,如何将PDF添加水印,一起来看看吧。 一、在Word中添加 一般来说,PDF文件都是通过其他文件转换来的,最常见的就是Word转换,我们可以先直接在Word文档中添加水印,然后再转换成PDF格式。 1、我…

    2022年7月25日
    730
  • 共享项目有哪些东西,共享项目免费投放模式介绍

    物联网项目具有收集数据,远程监控,无人管理,用完即走的优势,它创造了前所未有的商业模式。随着物联网技术的发展,结合移动互联网的优势,新兴产业随之而生,你身在其中吗?站在技术发展的前沿,捕捉商业的机会,谁会是更快实现一个小目标的人! 今年在硅谷一场非常受欢迎的物联网会议上,在一场演讲中,主讲嘉宾向观众提问:“你们当中现在有谁在做物联网产品?”约三分之二的现场观众举手。然后,他又问:“如今物联网领域哪…

    2022年6月7日
    740
  • 什么是微信营销,谈谈你们对微信营销的认识

    说到微信想的第一个我们大家先了解数据微信呢,到目前为止全球的用户已经注册量达到了十四亿之多,活跃用户已经达到了九亿之多,所以这个地方是一个营销最好的土壤。那么,其次,微信是全球免费使用最广泛的社交软件,什么意思呢,就是说会有更多的人来的微信里呢,进行聊天进行互动,进行的财富的积累。我们学习营销呢,先学习第一个叫做营销自己。比营销产品好,我们每一个人可以翻看自己的朋友圈。那你之前的朋友圈有没有向别人…

    2022年7月2日
    570

发表回复

登录后才能评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信