51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 431|回复: 0
打印 上一主题 下一主题

Postman使用AES加密并更换请求body

[复制链接]
  • TA的每日心情
    擦汗
    12 小时前
  • 签到天数: 942 天

    连续签到: 1 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2022-7-14 09:20:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    需求
      postman使用AES加密算法,加密请求体,然后修改原始body,再发给后端。
      实现
      具体使用API是如下图,collection_request.js。

    有一个update方法,所以在postman前置脚本中增加如下代码:
    1. /**
    2.    * 加密
    3.    */
    4.   function aesEncrypt(data,secret) {
    5.       const srcs = CryptoJS.enc.Utf8.parse(data);
    6.       // 将密钥做md散列计算,保证密钥长度
    7.       const encrypted = CryptoJS.AES.encrypt(srcs,CryptoJS.MD5(secret), {
    8.         iv: [],
    9.         mode: CryptoJS.mode.ECB,
    10.         padding: CryptoJS.pad.Pkcs7
    11.       });
    12.       return encrypted.toString();
    13.   }
    14.   // 密钥
    15.   const secret = "aXGr7jvD+yq87v9eTIAm0o5LFqAWsPgVmC37fewH";
    16.   console.log(`原始body:${pm.request.body.raw}`)
    17.   // 加密
    18.   let encryptData = aesEncrypt(pm.request.body.raw,secret);
    19.   // 修改请求体
    20.   pm.request.body.update({mode: 'raw',raw:`{"encrypt":"${encryptData}"}`})
    21.   // 修改头
    22.   pm.request.headers.upsert({ key: "Content-Type", value: "application/json"})
    23.   console.log(`真实body:${pm.request.body.raw}`);
    复制代码
    效果



    控制台

    后端解密工具类
      pom需要引入:
    1. <dependency>
    2.               <groupId>commons-codec</groupId>
    3.               <artifactId>commons-codec</artifactId>
    4.               <version>1.14</version>
    5.           </dependency>
    复制代码
    该工具类可以解密前端传来的加密数据:
    1. //参考引入包
    2.   import org.apache.commons.codec.binary.Base64;
    3.   import javax.crypto.Cipher;
    4.   import javax.crypto.SecretKey;
    5.   import javax.crypto.spec.SecretKeySpec;
    6.   import java.security.MessageDigest;
    7.   public class AesUtils{
    8.       public final static String AES_ALGORITHM = "AES/ECB/PKCS5Padding";
    9.       public final static String AES = "AES";
    10.       public final static String MD5 = "MD5";
    11.       public final static String UTF8 = "UTF-8";
    12.       /**
    13.        * aes ecb 128 加密
    14.        * @param content 明文数据
    15.        * @param secret 密钥(需要做散列计算)
    16.        * [url=home.php?mod=space&uid=26358]@return[/url] base64格式的加密字符串
    17.        */
    18.       public static String aesEncrypt(String content, String secret) throws RuntimeException{
    19.           try {
    20.               MessageDigest md = MessageDigest.getInstance(MD5);
    21.               // 对密钥做MD5散列,保证跨端的密钥长度一致
    22.               SecretKey secretKey = new SecretKeySpec(md.digest(secret.getBytes(UTF8)), AES);
    23.               Cipher cipher = Cipher.getInstance(AES_ALGORITHM);
    24.               // 加密模式
    25.               cipher.init(Cipher.ENCRYPT_MODE, secretKey);
    26.               byte[] cipherBytes = cipher.doFinal(content.getBytes(UTF8));
    27.               String result = Base64.encodeBase64String(cipherBytes);
    28.               return result;
    29.           } catch (Exception e) {
    30.               log.error("AES加密异常",e);
    31.               throw new RuntimeException("AES加密异常",e);
    32.           }
    33.       }
    34.       /**
    35.        * aes ecb 128 解密
    36.        * @param content base64格式的加密字符串
    37.        * @param secret 密钥(需要做散列计算)
    38.        * @return 明文数据
    39.        */
    40.       public static String aesDecrypt(String content, String secret) throws RuntimeException{
    41.           try {
    42.               byte[] dataBytes = Base64.decodeBase64(content);
    43.               MessageDigest md = MessageDigest.getInstance(MD5);
    44.               // 对密钥做MD5散列,保证跨端的密钥长度一致
    45.               SecretKey secretKey = new SecretKeySpec(md.digest(secret.getBytes()), AES);
    46.               Cipher cipher = Cipher.getInstance(AES_ALGORITHM);
    47.               // 解密模式
    48.               cipher.init(Cipher.DECRYPT_MODE, secretKey);
    49.               byte[] plainBytes = cipher.doFinal(dataBytes);
    50.               String result = new String(plainBytes, UTF8);
    51.               return result;
    52.           } catch (Exception e) {
    53.               log.error("AES解密异常",e);
    54.               throw new RuntimeException("AES解密异常",e);
    55.           }
    56.       }
    57.   }
    复制代码







    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-5-6 21:22 , Processed in 0.067385 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表