DES 暗号化と復号化の実装方法 (uniapp/vue) + Java)

目次

 I.はじめに

2.DESとは何ですか?

 3. 実際の操作

 1.Uniappが暗号化/復号化を実行します

 2. Javaによる暗号化/復号化


 I.はじめに

        現在、暗号化はデータを安全に処理するための基本的な方法の 1 つです。現在、私たちのバックグラウンドは WeChat の開発であり、決済時のユーザーの個人情報の許可認証操作が含まれます。現在、ユーザー情報の安全性を確保するために、DES アルゴリズムによる暗号化/復号化が使用されています。


2.DESとは何ですか?

        DES は、16 ラウンドの暗号化/復号化を通じて暗号化されたドキュメントを形成する対称キー暗号化ブロック アルゴリズムです。暗号化と復号化では同じキーが使用されるため、フロントエンド キーとバックエンド キーを使用する場合は、それらが一貫していることを確認してください。

詳細なリファレンス:DES アルゴリズムとは

 レンダリング: (ここでの効果は、フロントエンドの暗号化とバックエンドの復号化の結果です)


 3. 実際の操作

 1.Uniappが暗号化/復号化を実行します

1. まず、ターミナルに npm install crypto-js を書き込みます

//プロジェクトのルートディレクトリにnode_modulesフォルダが生成され、その中にcrypto-jsがあれば成功です。

2. 次に、js ファイル パッケージの下に des.js ファイルを書き込みます (ここでは config ディレクトリを使用します)。

3. des.js ファイルにメソッドを導入し、メソッドを呼び出します

//ここで @ は相対パスを表し、src を置き換えます。@ は CSS ファイル パスの導入には使用できません

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

詳細については、Uniapp が暗号化/復号化を実装しているを参照してください。

 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による暗号化/復号化

1. pom 依存関係を導入する

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

2. ユーティリティツールクラスの作成

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. コントローラーメソッドを実装する

@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)));
}

おすすめ

転載: blog.csdn.net/m0_70876920/article/details/132437480