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


     

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

    那么就有这几个问题:

    ·前端如何进行加密

    ·后端如何进行解密

    ·用什么加密算法

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

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

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

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

    1. package com.xxx.utils;
    2. import org.apache.commons.lang3.StringUtils;
    3. import org.apache.http.client.utils.DateUtils;
    4. import org.slf4j.Logger;
    5. import org.slf4j.LoggerFactory;
    6. import javax.crypto.Cipher;
    7. import javax.crypto.SecretKey;
    8. import javax.crypto.spec.IvParameterSpec;
    9. import javax.crypto.spec.SecretKeySpec;
    10. import java.util.Date;
    11. /**
    12. * 3DES加密解密工具类
    13. */
    14. public class ThreeDESUtils {
    15. private final static Logger logger = LoggerFactory.getLogger(ThreeDESUtils.class);
    16. /**
    17. * 加解密统一编码方式
    18. */
    19. private final static String ENCODING = "utf-8";
    20. /**
    21. * 加解密方式
    22. */
    23. private final static String ALGORITHM = "DESede";
    24. /**
    25. *加密模式及填充方式
    26. */
    27. private final static String PATTERN = "DESede/CBC/PKCS5Padding";
    28. public final static String SECRECY_KEY = "123456789987654321123456"; // 24位
    29. /**
    30. * 数据加密
    31. * @param message 待加密的数据
    32. * @param ivHex 加密偏移量设置
    33. * @return
    34. * @throws Exception
    35. */
    36. public static String encrypt(String message, String ivHex) throws Exception {
    37. if(StringUtils.isBlank(ivHex)){
    38. ivHex = DateUtils.formatDate(new Date(),"yyyyMMdd");
    39. }
    40. final SecretKey key = new SecretKeySpec(SECRECY_KEY.getBytes("utf-8"), ALGORITHM);
    41. final IvParameterSpec iv = new IvParameterSpec(ivHex.getBytes("utf-8"));
    42. final Cipher cipher = Cipher.getInstance(PATTERN);
    43. cipher.init(Cipher.ENCRYPT_MODE, key, iv);
    44. final byte[] plainTextBytes = message.getBytes("utf-8");
    45. final byte[] cipherText = cipher.doFinal(plainTextBytes);
    46. return new sun.misc.BASE64Encoder().encode(cipherText);
    47. }
    48. /**
    49. * 3DES数据解密
    50. * @param message 待解密的数据。这个数据已经进行了一次Base64加密
    51. * @param ivHex 加密偏移量设置
    52. * @return
    53. * @throws Exception
    54. */
    55. public static String decrypt(String message, String ivHex) throws Exception {
    56. if(StringUtils.isBlank(ivHex)){
    57. ivHex = DateUtils.formatDate(new Date(),"yyyyMMdd");
    58. }
    59. final SecretKey key = new SecretKeySpec(SECRECY_KEY.getBytes("utf-8"), ALGORITHM);
    60. final IvParameterSpec iv = new IvParameterSpec(ivHex.getBytes("utf-8"));
    61. final Cipher decipher = Cipher.getInstance(PATTERN);
    62. decipher.init(Cipher.DECRYPT_MODE, key, iv);
    63. final byte[] plainText = decipher.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(message));
    64. return new String(plainText, "UTF-8");
    65. }
    66. }

  • 相关阅读:
    zookeeper教程
    基于纳芯微产品的尾灯方案介绍
    SpringCloud 配置管理:Nacos
    #AngularJS#简介
    小程序上新(2022.11.15~11.28)
    IPD-PDT-POP角色的名称、定位和职责说明书
    vue在线查看pdf文件
    线性表应用(非递减合并、分解链表、删除线性表)
    链表中面试常考题
    Spring cloud alibaba——Senta(二)
  • 原文地址:https://blog.csdn.net/xzb5566/article/details/133763786