动态签名放入http请求头

jasypt可用于加密,上文介绍了加密数据库密码等字符串。如果每次都使用同一个密码,就算加了密,也可以用这个重复发送请求。

如何让每次请求都使用不同的密码(签名)。可将生成一对非对称密钥,将时间戳与随机数加入计算,得到的签名每次都不一样。这样到服务端后,再拿另一密钥来解密,以实现每次请求签名都不一样。

代码:

import org.apache.commons.lang3.RandomStringUtils;
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.iv.RandomIvGenerator;

public class JaspytRequestParam2 {
    private static final String WORK_KEY="123456p";

    public static void main(String[] args) {

        /**
         * 配置步骤
         * 1.自定义一个key,配置到客户端的这个字段signConfig.setAppSecret(key);
         * 2.用EncUtils.encrypt(key, WORK_KEY)生成的字符保存到服务端t_app_key表的app_secret字段。
         *
         */

        printParam();
    }
    public static void printParam(){

        String appKey="xxxa";
        String nonce = RandomStringUtils.randomAlphanumeric(10);
        String timestamp = System.currentTimeMillis() + "";
        SignConfig signConfig=new SignConfig();
        signConfig.setAppKey(appKey);
        String clientSecret="123";
        signConfig.setAppSecret(clientSecret);
        String pwd=SignCheckUtils.generateSign(signConfig, timestamp, nonce);
        System.out.println("timestamp:"+timestamp);
        System.out.println("nonce:"+nonce);
        System.out.println("client Signature:"+pwd);
        System.out.println("AppKey:"+appKey);


        //这一步是提前做的
        String serverSecret=encrypt(clientSecret, WORK_KEY);
        //所以当请求来了,服务器直接从数据库取出serverSecret。
        String  decAppSecret=decrypt(serverSecret, WORK_KEY);

        // calculate server-end signature.
        String serverSign = SignUtil.generateSign(appKey, decAppSecret, timestamp, nonce);
        System.out.println("serverSign:"+serverSign);
    }

    public static String decrypt(String text, String password) {
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        encryptor.setPassword(password);
        encryptor.setAlgorithm("PBEWithHMACSHA512AndAES_256");
        encryptor.setIvGenerator(new RandomIvGenerator());
        return encryptor.decrypt(text);
    }

    public static String encrypt(String text, String password) {
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        encryptor.setPassword(password);
        encryptor.setAlgorithm("PBEWithHMACSHA512AndAES_256");
        encryptor.setIvGenerator(new RandomIvGenerator());
        return encryptor.encrypt(text);
    }
}


文/程忠 浏览次数:0次   2023-12-15 17:04:12

相关阅读


评论:
点击刷新

↓ 广告开始-头部带绿为生活 ↓
↑ 广告结束-尾部支持多点击 ↑