简单数据加解密,JS和JAVA同时实现

前端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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

震撼哥blog

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值