AES加解密做复杂接口测试(java),请认真看完

本文详细介绍了在软件开发中为何需要数据加密,以及如何使用CryptoJS和Java实现AES加密解密。通过前后端代码分析,展示了前端如何使用CryptoJS进行加密,后端如何用PHP解密。接着,提供了Java实现加密算法的步骤,并指导如何打包成jar,最后在JMeter中进行接口测试,确保加密解密的正确性。
摘要由CSDN通过智能技术生成

1.为什么要进行加密?
在软件开发中,经常要对数据进行传输,数据在传输的过程中可能被拦截,被监听,所以在传输数据的时候使用数据的原始内容进行传输的话,安全隐患是非常大的。因此就要对需要传输的数据进行在客户端进行加密,然后在服务器进行解密!

2.开发给你一段代码,如何写出想要的加密算法?

  • 从前台到后台,讲解一个完整数据传输加密解密的流程。前台CryptoJS中进行数据加密,通过发送数据到服务器,服务器进行解密!
    以登录为例,通过抓包可知:
    在这里插入图片描述
  • 先解passWord的值

前端CryptoJS加密,代码提供:

* handleForm() {
   
      const form = JSON.parse(JSON.stringify(this.loginForm))
      const {
    password } = form
      if (!password) {
    return form }
      const str = JSON.stringify({
    passWord: password })
      const timestamp = Date.now() + ''
      form.password = Encrypt(str, timestamp)
      form.timestamp = timestamp
      return form
    }
    *
    * export function Encrypt(text, token) {
   
    // 后台
    const {
    key, iv } = getKeyAndIv(token)
    return CryptoJS.AES.encrypt(text, CryptoJS.enc.Utf8.parse(key), {
   
        iv: CryptoJS.enc.Utf8.parse(iv),
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    }).toString()
}

function getKeyAndIv(token) {
   
    token = token || auth.getToken()
    const md5Token = md5(token).toLowerCase()
    const key = md5Token.slice(0, 16)
    const iv = md5Token.slice(-16)
    return {
    key, iv }
}

后端PHP解密,代码提供:

$timestamp = md5($param['timestamp']);
                $key = substr($timestamp, 0, 16);
                $iv = substr($timestamp, -16);
                $decryptPassword = openssl_decrypt(base64_decode($param['passWord']), 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);

分析:通过前后端代码分析得出前端是通过CryptoJS.AES来进行对称加密,开发key和iv值是未登录时是取当前时间的时间搓通过md5加密转小写32位后分别取前16位和后16位作为key和iv值,data是json格式拼接进行入参:{“passWord”:""+password+""}


  • 开始编写加密算法(java语言)

/**
 * 加密方法
 * @param data  要加密的数据
 * @param key 加密key
 * @param iv 加密iv
 * @return 加密的结果
 * @throws Exception
 */
public static String encrypt(String data,String key,String iv) throws Exception {
   
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");//"算法/模式/补码方式"
    byte[] keyBytes = key.getBytes("utf-8");
    SecretKeySpec skeySpec = new SecretKeySpec(keyBytes, "AES");
    //使用CBC模式,需要一个向量iv,可增加加密算法的强度
    byte[] ivBytes = iv
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值