SpringBoot前后端数据传输加密「建议收藏」

SpringBoot前后端数据传输加密「建议收藏」采用的算法为AES算法1.编写加密工具类packagecom.pibigstar.utils;importjavax.crypto.Cipher;importjavax.crypto.KeyGenerator;importjavax.crypto.spec.SecretKeySpec;importorg.apache.commons.codec.binary.Base…

大家好,又见面了,我是你们的朋友全栈君。

采用的算法为AES算法

1. 编写加密工具类

package com.pibigstar.utils;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;

/** * 前后端数据传输加密工具类 * @author pibigstar * */
public class AesEncryptUtils { 
   
    //可配置到Constant中,并读取配置文件注入
    private static final String KEY = "abcdef0123456789";

    //参数分别代表 算法名称/加密模式/数据填充方式
    private static final String ALGORITHMSTR = "AES/ECB/PKCS5Padding";

    /** * 加密 * @param content 加密的字符串 * @param encryptKey key值 * @return * @throws Exception */
    public static String encrypt(String content, String encryptKey) throws Exception {
        KeyGenerator kgen = KeyGenerator.getInstance("AES");
        kgen.init(128);
        Cipher cipher = Cipher.getInstance(ALGORITHMSTR);
        cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(encryptKey.getBytes(), "AES"));
        byte[] b = cipher.doFinal(content.getBytes("utf-8"));
        return Base64.encodeBase64String(b);
    }

    /** * 解密 * @param encryptStr 解密的字符串 * @param decryptKey 解密的key值 * @return * @throws Exception */
    public static String decrypt(String encryptStr, String decryptKey) throws Exception {
        KeyGenerator kgen = KeyGenerator.getInstance("AES");
        kgen.init(128);
        Cipher cipher = Cipher.getInstance(ALGORITHMSTR);
        cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(decryptKey.getBytes(), "AES"));
        byte[] encryptBytes = Base64.decodeBase64(encryptStr);
        byte[] decryptBytes = cipher.doFinal(encryptBytes);
        return new String(decryptBytes);
    }

    public static String encrypt(String content) throws Exception {
        return encrypt(content, KEY);
    }
    public static String decrypt(String encryptStr) throws Exception {
        return decrypt(encryptStr, KEY);
    }


    public static void main(String[] args) throws Exception {
        String content = "派大星";
        System.out.println("加密前:" + content);

        String encrypt = encrypt(content, KEY);
        System.out.println("加密后:" + encrypt);

        String decrypt = decrypt(encrypt, KEY);
        System.out.println("解密后:" + decrypt);
    }
}

2. 前端

js 文件下载:https://pan.baidu.com/s/11LnXUnsMtGW5C8sycf2SDQ

导入 js 文件

    <script type="text/javascript" src = "js/aes.js"></script>
    <script type="text/javascript" src = "js/pad-zeropadding.js"></script>
    <script type="text/javascript" src = "js/security.js"></script>

发送数据

function sendData() { 
   
        alert("发送的数据:"+Encrypt(JSON.stringify({name:"派大星"})));
        $.ajax({
            type: "POST",
            url:"/save",
            data:Encrypt(JSON.stringify({name:"派大星"})),
            dataType:'json',
            contentType: "application/json",
            success: function(resData) { 
   
                alert("返回的数据:"+resData);
                alert("解密之后:"+Decrypt(resData));
                alert("解密之后转json对象:"+JSON.parse(Decrypt(resData)).name);
            }
        }); 
    }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142906.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PHP八大设计模式「建议收藏」

    PHP八大设计模式「建议收藏」PHP命名空间可以更好地组织代码,与Java中的包类似。Test1.php

    2022年7月25日
  • 关于 RenderControl 的问题

    关于 RenderControl 的问题主要解决RenderControl时提示控件必须放在具有runat=server的窗体标记内”错误的解决方法1,http://www.cnblogs.com/zhangronghua/archive/2008/11/07/951899.html2,http://hi.baidu.com/tyrant8203/blog/item/615d77082777c0960a7b82b6.html…

    2022年7月20日
  • idea2021.11激活码【2021免费激活】[通俗易懂]

    (idea2021.11激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlCEX82FN4RV-eyJsa…

    2022年3月29日
  • 计算机网络vlan的作用,计算机网络之九:VLAN

    计算机网络vlan的作用,计算机网络之九:VLAN一:什么是VLAN广播在网络中起着非常重要的作用,如发现新设备,调整网络路径,IP地址租赁等,许多网络协议都要用到广播。然而,随着网络内计算机数量的增多,广播包的数量也会急剧增加,当广播包的数量占到通讯总量的30%时,网络的传输效率将会明显下降。所以当局域网内的计算机达到一定数量后,通常采用划分VLAN(虚拟局域网)的方式将网络分隔开来。将一个大的广播域划分为若干个小的广播域,以减小广播可能造成的…

    2022年8月10日
  • win10总显示打印机未连接服务器,win10安装打印机一直未响应。。。「建议收藏」

    win10总显示打印机未连接服务器,win10安装打印机一直未响应。。。「建议收藏」Win10安装打印机驱动的方法1.首先将打印机与电脑进行连接,目前大部分打印机都是通过USB数据线与电脑U口进行连接的。在打印机连接完成后,我们需要通过以下方法查看打印机连接状态是否正常:2.从打开的“控制面板”界面中,点击“硬件和声音”栏目中的“查看设备和打印机”按钮进入。3.此时将打开“设备和打印机”窗口,从此界面中就可以找到“未指定”的设备,此设备便是当前所连接的打印机。4.Win10正式版…

    2022年6月6日
  • 插值法综合实例用matlab解决,matlab 插值法「建议收藏」

    插值法综合实例用matlab解决,matlab 插值法「建议收藏」matlab插值法实验五插值法5.1实验目的掌握插值的基本思想与方法,会借助数学软件Matlab求解并讨论其收敛性.5.2实验内容1、Lagrange插值法、Newton插值法的Matlab求解方法,在对Runge现象的观察基础上,了解高次插值的不稳定性及其改进方法;2、熟悉Matlab中的插值求解函数,掌握三次样条插值的Matlab求解;3、会求解某些简单的实际问题.5.3实验步骤5.5.1…

    2022年5月5日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号