动态签名放入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); } }
相关阅读
评论:
↓ 广告开始-头部带绿为生活 ↓
↑ 广告结束-尾部支持多点击 ↑