【数据加密、解密】前后端数据传输的过程中,如何进行数据加密传输,保证数据的传输安全,防止被他人窃取

前端进行参数传递的时候 ,有些数据为了安全起见还是需要加密传输的,比如用户密码,比如登录的时候,注册的时候,用户输入的密码,如果明文进行传输还是不太安全的,所以一般可以进行加密后传递到后端。

那么就有这几个问题:

·前端如何进行加密

·后端如何进行解密

·用什么加密算法

一般是用3DES的加密解密方式

前端引用3DES加密库,对数据进行加密,然后传输到后端,后端通过3DES进行解密操作就可以了。

后端java代码如下:加密、解密:

代码中的 SECRECY_KEY 就是 我们用到的加密密钥。你可以改成你自己的。我这里是3DES加密,用到24位的加密密钥。
public final static String SECRECY_KEY = "123456789987654321123456"; // 24位

java 复制代码
package com.xxx.utils;

import org.apache.commons.lang3.StringUtils;
import org.apache.http.client.utils.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Date;

/**
 * 3DES加密解密工具类
 */
public class ThreeDESUtils {
    private final static Logger logger = LoggerFactory.getLogger(ThreeDESUtils.class);
    /**
     * 加解密统一编码方式
     */
    private final static String ENCODING = "utf-8";
    /**
     * 加解密方式
     */
    private final static String ALGORITHM  = "DESede";
    /**
     *加密模式及填充方式
     */
    private final static String PATTERN = "DESede/CBC/PKCS5Padding";

    public final static String SECRECY_KEY = "123456789987654321123456"; // 24位

    /**
     * 数据加密
     * @param message       待加密的数据
     * @param ivHex         加密偏移量设置
     * @return              
     * @throws Exception
     */

    public static String encrypt(String message, String ivHex) throws Exception {
        if(StringUtils.isBlank(ivHex)){
            ivHex = DateUtils.formatDate(new Date(),"yyyyMMdd");
        }
        final SecretKey key = new SecretKeySpec(SECRECY_KEY.getBytes("utf-8"), ALGORITHM);
        final IvParameterSpec iv = new IvParameterSpec(ivHex.getBytes("utf-8"));
        final Cipher cipher = Cipher.getInstance(PATTERN);
        cipher.init(Cipher.ENCRYPT_MODE, key, iv);
        final byte[] plainTextBytes = message.getBytes("utf-8");
        final byte[] cipherText = cipher.doFinal(plainTextBytes);
        return new sun.misc.BASE64Encoder().encode(cipherText);
    }

    /**
     * 3DES数据解密
     * @param message       待解密的数据。这个数据已经进行了一次Base64加密
     * @param ivHex         加密偏移量设置
     * @return
     * @throws Exception
     */
    public static String decrypt(String message, String ivHex) throws Exception {
        if(StringUtils.isBlank(ivHex)){
            ivHex = DateUtils.formatDate(new Date(),"yyyyMMdd");
        }
        final SecretKey key = new SecretKeySpec(SECRECY_KEY.getBytes("utf-8"), ALGORITHM);
        final IvParameterSpec iv = new IvParameterSpec(ivHex.getBytes("utf-8"));
        final Cipher decipher = Cipher.getInstance(PATTERN);
        decipher.init(Cipher.DECRYPT_MODE, key, iv);
        final byte[] plainText = decipher.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(message));
        return new String(plainText, "UTF-8");
    }

}
相关推荐
信誓旦旦的程序猿4 分钟前
【Python 量化取数指南 #09】Python 拿港股通数据:港股通成交与港股财报实测
java·python·股票数据api·股票数据·股票数据api接口·股票api数据接口·股票量化数据api
小程序设计1 小时前
本科毕设避坑|大数据 / 单片机物联网 / 网络工程 / PLC / 机械设计选题与落地心得
java·hive·hadoop·单片机
卓怡学长1 小时前
w206基于SpringBoot的社区团购小程序设计与实现
java·spring boot·spring·intellij-idea
IT枫斗者枫哥6 小时前
MyBatis一对多分页:LIMIT 20,为什么凑不齐20个订单?
java·数据库
代码方舟6 小时前
Java数据工程:利用天远全网运营商三要素优化线上实名认证合规体验
java·人工智能
BBmmo6 小时前
我的 Java 学习笔记 · 第 7 篇:泛型与通配符
java
独泪了无痕6 小时前
Hutool之RandomUtil:随机数生成的终极利器
java·后端
花开路口6 小时前
深入理解 Java/Kotlin 协变与逆变
java·kotlin
运行时异常6 小时前
【WMS 仓储系统集成 AI Agent 实战】第 7 讲:Vue3 前端工程化——Token 刷新锁、Markdown 渲染踩坑与权限体系
java
她的男孩6 小时前
开放接口限流从 20 改到 200 还是每分钟 20 次:拆完防重放+幂等+限流,我找到 5 个静默失效的坑
java·后端·架构