个人技术分享

前端Vue调用Java后端接口中的数据进行加密,以避免敏感数据泄露。

现在实现一个高性能加密方法,用来对数据进行加密后传输。算法包括JS的加密和解密方法,也包括Java的加密解密方法。

可以在前端加密,后端解密。也可以在后端加密,前端解密。

JS代码如下

import { Base64 } from 'js-base64';
import md5 from 'js-md5';

let md5Key = md5('sucwjkey');
function xor(data)
{
  if (typeof data !== 'string') {
    return data;
  }

  let result = '';
  for (var i = 0; i < data.length; i++) {
    var k = i % 32;
    result += String.fromCharCode(data.charCodeAt(i) ^ md5Key.charCodeAt(k));
  }

  return result;
}

function enc(data)
{
  data = Base64.encode(data);
  data = xor(data);
  return Base64.encode(data);
}
function dec(data)
{
  data = Base64.decode(data);
  data = xor(data);
  return Base64.decode(data);
}

let data = "[{'name':'test',;!.测试一下}]";
console.log('data is')
console.log('原始数据:'+data)
console.log('加密后:'+enc(data))
console.log('解密后:'+dec(enc(data)))

输出如下:

ae9e14e37df94b878a377f459174baa2.png

JAVA代码如下:

import java.nio.charset.StandardCharsets;
import java.util.Base64;

public class EncryptUtils {

    public static void main(String[] args) {、
        String data = "[{'name':cwj,;!.测试一下}]";
        System.out.println("data is");
        System.out.println("原始数据:" + data);
        System.out.println("加密后:" + enc(data));
        System.out.println("解密后:" + dec(enc(data)));
    }

    //解密
    public static String dec(String data) {
        return base64Decode(xordata(base64Decode(data)));
    }

    //加密
    public static String enc(String data) {
        return base64Encode(xordata(base64Encode(data)));
    }

    private static String base64Encode(String data) {
        return Base64.getEncoder().encodeToString(data.getBytes(StandardCharsets.UTF_8));
    }

    private static String base64Decode(String data) {
        return new String(Base64.getDecoder().decode(data));
    }

    private static String xordata(String data) {
        String key = "9722756041bf30025cbff04b515e76bd";

        byte[] dataBytes = data.getBytes(StandardCharsets.UTF_8);
        byte[] keyBytes = key.getBytes(StandardCharsets.UTF_8);

        StringBuilder encryptedData = new StringBuilder();
        for (int i = 0; i < dataBytes.length; i++) {
            int k = i % keyBytes.length;
            encryptedData.append((char) (dataBytes[i] ^ keyBytes[k]));
        }

        return encryptedData.toString();
    }

}

运行结果如下

70936498d1b84433ab76365512d5ed3f.png