如何实现 DES 加密,解密(uniapp/vue) + Java)

目录

 一、引言

二、 什么是DES?

 三、实际操作

 1. Uniapp 进行 des 加密/解密

 2. Java 进行 des 加密/解密


 一、引言

        现如今,加密是对数据安全处理的基本手段之一。今天我们的背景就是微信开发中,涉及到支付时用户个人信息的权限认证操作。今天使用的就是通过DES算法进行加密/解密,保证用户信息安全性。


二、 什么是DES?

        DES是一种对称性的密钥加密块算法,通过16轮的加密/解密,形成加密文档。因为加密和解密使用的是同一个密钥,所以在使用时要保证前后端密钥统一。

详细参考:什么是DES算法

 效果图:(此处效果为前端加密,后端解密的结果)


 三、实际操作

 1. Uniapp 进行 des 加密/解密

1. 首先,在终端编写 npm install crypto-js

//项目根目录会生成node_modules文件夹,里面有crypto-js就说明成功了

2. 其次,在存放js文件包下(我用的是config目录)编写des.js文件

3. 引入 des.js 文件中方法,调用方法

//这里 @ 表示相对路径,替代 src,@不能用于引入css文件路径

import { encryptDes, decryptDes } from '@/common/des.js'

详情参考:Uniapp实现 des 加密/解密

 des.js 文件

import CryptoJS from '../node_modules/crypto-js/crypto-js.js' 

// DES加密
export const encryptDes = (message, key) => {
    const keyHex = CryptoJS.enc.Utf8.parse(key);
    const encrypted = CryptoJS.DES.encrypt(message, keyHex, {
     mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7
    });
    return encrypted.toString();
}

// DES解密
export const decryptDes = (ciphertext, key) => {
   const keyHex = CryptoJS.enc.Utf8.parse(key);
   // direct decrypt ciphertext
 const decrypted = CryptoJS.DES.decrypt({
  ciphertext: CryptoJS.enc.Base64.parse(ciphertext)
 }, keyHex, {
  mode: CryptoJS.mode.ECB,
 padding: CryptoJS.pad.Pkcs7
});
return decrypted.toString(CryptoJS.enc.Utf8);
}

test.vue 

const util = require("../../config/util.js") //引用 node.js 的 util 工具类
import {encryptDes, decryptDes} from '@/config/des.js' // 引用具体的方法
 
 methods:{
     test(){
         //拼接字符串
        let info = this.a + "," + this.b + "," +
this.c + "," + this.d;
    console.log("加密前:" + info);
    info = encryptDes(info, 'key')
    console.log("加密后信息为:" + info);
        //加密字符串信息
    util.request("http://localhost:8081/test", {test: info}, "POST").then(res => {});     
     } 
 }

 2. Java 进行 des 加密/解密

1. 引入 pom 依赖

<!-- spring security 安全认证 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

2. 编写 util 工具类

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
import org.apache.commons.net.util.Base64;

public class DesUtils {
    /** 用于加密解密的同一把密钥 */
    public static final String ORIGNKEY = "key";

    /**
     * 加密算法
     */
    public static String desEncript(String clearText, String originKey) throws Exception
    {
        Cipher cipher= Cipher.getInstance("DES"); /*提供加密的方式:DES*/
        SecretKeySpec key=getKey(originKey);  /*对密钥进行操作,产生16个48位长的子密钥*/
        cipher.init(Cipher.ENCRYPT_MODE,key); /*初始化cipher,选定模式,这里为加密模式,并同时传入密钥*/
        byte[] doFinal=cipher.doFinal(clearText.getBytes());   /*开始加密操作*/
        String encode= Base64.encode(doFinal);    /*对加密后的数据按照Base64进行编码*/
        return encode;
    }

    /**
     * 解密算法
     */
    public static String desDecript(String cipherText, String originKey) throws Exception
    {
        Cipher cipher=Cipher.getInstance("DES");   /*初始化加密方式*/
        Key key=getKey(originKey);  /*获取密钥*/
        cipher.init(Cipher.DECRYPT_MODE,key);  /*初始化操作方式*/
        byte[] decode=Base64.decode(cipherText);  /*按照Base64解码*/
        byte[] doFinal=cipher.doFinal(decode);   /*执行解码操作*/
        return new String(doFinal);   /*转换成相应字符串并返回*/
    }

    /**
     * 获取密钥算法
     */
    public static SecretKeySpec getKey(String originKey)
    {
        byte[] buffer=new byte[8];
        byte[] originBytes=originKey.getBytes();
        /**
         * 防止输入的密钥长度超过64位
         */
        for(int i=0;i<8&&i<originBytes.length;i++)
        {
            buffer[i]=originBytes[i];  /*如果originBytes不足8,buffer剩余的补零*/
        }
        SecretKeySpec key=new SecretKeySpec(buffer,"DES"); /*第一个参数是密钥字节数组,第二个参数是加密方式*/
        return key;  /*返回操作之后得到的密钥*/
    }
}

3. 实现 Controller 方法

@PostMapping("/test")
//这里的 AjaxResult 和 toAjax 使用到了若依,可根据自身需要换掉
public AjaxResult test(String text) throws Exception {
    System.out.println("走到了 test 方法中,开始解密数据:" + text);
    //Des 解密文本,传输两个值,第一个是文本信息,第二个是密钥
    return toAjax(service.test(DesUtils.desDecript(text, DesUtils.ORIGNKEY)));
}

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
uniapp是一种基于Vue.js的跨平台开发框架,可以用于开发iOS、Android和Web应用程序。它提供了丰富的组件和API,使开发者能够轻松地构建功能强大的应用程序。 要在uniapp实现录音、上传和与Java后端交互的功能,可以按照以下步骤进行操作: 1. 引入uni组件和uView组件:根据引用中提到的uni组件和uView组件,确保已经在uniapp项目中引入了这些组件。 2. 授权录音:使用uniapp提供的API进行录音授权。可以使用uni.request()方法向后端发送请求,获取录音授权。 3. 录制音频:使用uniapp提供的API进行录音操作。可以使用uni.startRecord()方法开始录音,使用uni.stopRecord()方法停止录音。 4. 保存录音文件:将录制的音频文件保存到本地或者上传到服务器。可以使用uni.saveFile()方法将录音文件保存到本地,使用uni.uploadFile()方法将录音文件上传到服务器。 5. 与Java后端交互:使用uniapp提供的API与Java后端进行数据交互。可以使用uni.request()方法发送请求,与后端进行数据传输。 以下是一个示例代码,演示了uniapp中录音、上传和与Java后端交互的过程: ```javascript // 授权录音 uni.authorize({ scope: 'scope.record', success() { // 录制音频 uni.startRecord({ success(res) { // 保存录音文件 uni.saveFile({ tempFilePath: res.tempFilePath, success(saveRes) { // 上传录音文件到服务器 uni.uploadFile({ url: 'http://your-java-backend.com/upload', filePath: saveRes.savedFilePath, name: 'file', success(uploadRes) { console.log('上传成功', uploadRes.data); }, fail(uploadErr) { console.log('上传失败', uploadErr); } }); }, fail(saveErr) { console.log('保存录音文件失败', saveErr); } }); }, fail(res) { console.log('录音失败', res); } }); }, fail() { console.log('录音授权失败'); } }); ``` 请注意,以上代码仅为示例,具体实现可能需要根据实际情况进行调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值