首页 > 其他分享 >Forest请求前置操作RSA签名加密

Forest请求前置操作RSA签名加密

时间:2022-11-16 21:25:30浏览次数:48  
标签:HTTP 请求 RSA Forest 加密 私钥 String

前言

在很多时候为了安全需要将请求的参数签名签名加密,使用非对称加密-RSA,非对称加密有供钥和私钥两个概念,私钥自己拥有,不能给别人,公钥公开,根据应用的不同,我们可以选择不同的密钥加密,
1:签名:使用私钥加密,公钥解密。用于让所有公钥所有者验证私钥所有者的身份并且用来防止私钥所有者发布的内容被篡改,但是不能保证内容不被他人获得,
2:加密:用公钥加密,私钥解密,用于向公钥所有者发布信息,这个信息可能被他人篡改,但是无法被他人获得。

这里需要调其他平台项目的接口,需要对请求的参数进行签名,RSA算法采用默认补位方式RSA/ECB/PKCS1Padding

一、Forest

Forest 是一个开源的 Java HTTP 客户端框架,它能够将 HTTP 的所有请求信息(包括 URL、Header 以及 Body 等信息)绑定到您自定义的 Interface 方法上,能够通过调用本地接口方法的方式发送 HTTP 请求。
使用 Forest 就像使用类似 Dubbo 那样的 RPC 框架一样,只需要定义接口,调用接口即可,不必关心具体发送 HTTP 请求的细节。同时将 HTTP 请求信息与业务代码解耦,方便您统一管理大量 HTTP 的 URL、Header 等信息。而请求的调用方完全不必在意 HTTP 的具体内容,即使该 HTTP 请求信息发生变更,大多数情况也不需要修改调用发送请求的代码。
这里使用Forest来做客户端使用。

二、项目使用

项目配置

forest:
  max-connections: 100
  timeout: 3000
  connect-timeout: 3000
  read-timeout: 3000
  variables:
    phpUrl: http://xxxxxx.com

编写接口

@BaseRequest(baseURL = "${phpUrl}", interceptor = PhpRequestInterceptor.class)
public interface PhpRequestClient {

    /**
     * xxxx
     * @param body 请求数据
     * @return
     */
    @Post(url = "/syncLabel")
    Boolean syncLabel(@Body("data") String body);

    /**
     * xxxx
     * @param body 请求数据
     * @return
     */
    @Post(url = "/syncClassification")
    Boolean syncClassification(@Body("data") String body);
}

这里使用post请求,由于这个平台的多个接口都需要进行签名,所以在forest拦截器当中进行签名,定义新的拦截器实现Interceptor

/**
 * php接口请求拦截器
 * @author liufuqiang
 */
public class PhpRequestInterceptor<T> implements Interceptor<T> {

    @Override
    public void onInvokeMethod(ForestRequest request, ForestMethod method, Object[] args) {
        if (ForestRequestType.POST.equals(request.getType())) {
            ForestBody body = request.getBody();
            List<NameValueRequestBody> bodyList = body.getNameValueItems();
            for (NameValueRequestBody bodyItem : bodyList) {
                bodyItem.setValue(encryptRequestBody(String.valueOf(bodyItem.getValue())));
            }
        }
    }

    @Override
    public boolean beforeExecute (ForestRequest request) {
        return true;
    }

    private final static String PHP_SIGN_PRIVATE_KEY = "私钥";

    private final static String PHP_SIGN_PUBLIC_KEY = "公钥";

    private String encryptRequestBody (String params) {
        RSA rsa = new RSA(PHP_SIGN_PRIVATE_KEY, PHP_SIGN_PUBLIC_KEY);
        return rsa.encryptBase64(params, KeyType.PrivateKey);
    }
}


拦截器写完需要在指定地方进行注入

最后发送请求可以在控制台看到请求体为加密之后的数据

标签:HTTP,请求,RSA,Forest,加密,私钥,String
From: https://www.cnblogs.com/LiuFqiang/p/16897474.html

相关文章

  • 某咖啡 app 加密参数分析进阶版
    本文由简悦SimpRead转码,原文地址mp.weixin.qq.com仅供学习研究。请勿用于非法用途,本人将不承担任何法律责任。前言app某某咖啡v4.4.0mitmproxy抓包......
  • 7对称加密非对称加密
    数据的编码与加密ASCII编码ASCII((AmericanStandardCodeforInformationInterchange):美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英......
  • Pig4cloud密码加密-AES加密key为什么是16位?
    AES算法是一种分组密码算法,有三种不同的密钥长度规模,分别是128比特、192比特和256比特。在pig中前端加密后端这里我们说的16位就是16字节,也就是AES中的128比特。为......
  • VBA代码混淆加密保护 VBA代码加密 VBA混淆
    VBA代码助手下载地址本功能一般可结合模块隐藏和工程不可查看一起使用  代码混淆适用于任何vba环境cadvbawordvbacoldrawvba的代码均可以用本工具混淆!VBA模块......
  • 云小课|使用SQL加密函数实现数据列的加解密
    摘要:数据加密作为有效防止未授权访问和防护数据泄露的技术,在各种信息系统中广泛使用。作为信息系统的核心,GaussDB(DWS)数仓也提供数据加密功能,包括透明加密和使用SQL函数加......
  • Node.js的crypto模块,crypto加密算法
    1、安装2、使用//通过crypto.createHash()函数,,创建一个hash实例,但是需要调用md5,sha1,sha256,sha512算法来实现实例的创建。crypto.createHash();//创建hash实例letsha1......
  • 002-STM32F407+EC200基本控制篇(阿里云物联网平台)-STM32F407+EC200使用MQTT+SSL加密
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ZLIOTE_STM32F407/EC200/aliyun.html"frameborder="0"scrolling="auto"width="100%"height="1500"><......
  • 加密小猿微博
    下面本人微博https://weibo.com/u/2434823180欢迎私信交流 ......
  • 异或操作的加密,解密,原理。
    异或加密异或加密是一种很简单的加密算法。原理:根据异或的运算规则,在二进制中,相同为0,不同为1。且:某个数与0异或等于这个数的本身,与1异或等于这个数的相反。特性:异或运算......
  • 对称加密模式-CipherMode
    原文:https://blog.csdn.net/zfive5/article/details/1428173System.Security.Cryptography加密算法主要分为:l       散列算法(MD5/SHA1/RIPEMD160/SHA256/S......