国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)庫加密AES 適用 Mysql Oracle 以及java

這篇具有很好參考價值的文章主要介紹了數(shù)據(jù)庫加密AES 適用 Mysql Oracle 以及java。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔


前言

備忘錄:加密key為:vU4C!~0_HQtlU_p@ 可采用任意長度為16位的字符串

數(shù)據(jù)庫數(shù)據(jù)需要對敏感數(shù)據(jù)進行加密,比如手機號,身份證號以及銀行卡號等進行加密。需要一套通用的加密方法可以在java項目以及oracle和mysql數(shù)據(jù)庫中通用。于是在參考其他博主文件后有如下解決方案。此博客僅作為備忘錄使用,并作技術交流。。


一、Mysql

加密:
SELECT to_base64(AES_ENCRYPT(‘4564879512346895654’,‘vU4C!~0_HQtlU_p@’));
解密:
SELECT AES_DECRYPT(from_base64(‘sQtqbsu/05NDCngxv/3al84bdzwtIFG91Zr6hZDpOvE=’),
‘vU4C!~0_HQtlU_p@’);
解密出來時blob文本如果想改成string可以使用如下解密語句
SELECT CONVERT(AES_DECRYPT(from_base64('sQtqbsu/05NDCngxv/3al84bdzwtIFG91Zr6hZDpOvE='),
'vU4C!~0_HQtlU_p@') USING utf8mb4) as field_value;

二、Oracle

1.賦予角色加密權限并創(chuàng)建函數(shù)

因為是oracle,所以首先得確定你使用的角色是否擁有加密數(shù)據(jù)的權限,否則無法使用DBMS_CRYPTO包。

oracle常用的權限查詢指令

查看擁有權限的用戶有哪些:
select * from dba_tab_privs where table_name = 'DBMS_CRYPTO' and owner = 'SYS';
執(zhí)行以下sql:grant execute on sys.dbms_crypto to myuser;//myuser 是你oracle當前使用的角色

函數(shù)如下(示例):

-- 加密
create or replace FUNCTION FUN_ENCRYPTION(
V_STR VARCHAR2
)
RETURN VARCHAR2
AS
V_KEY_RAW RAW(16) ;
V_STR_RAW RAW(2000) ;
V_RETURN_STR VARCHAR2(2000) ;
V_TYPE PLS_INTEGER ;
BEGIN
	IF V_STR IS NULL OR V_STR = 'null' THEN 
	 BEGIN 
		 RETURN V_STR;
	 END;
	ELSE 
	 BEGIN 
		 V_KEY_RAW := UTL_I18N.STRING_TO_RAW('vU4C!~0_HQtlU_p@','UTF8') ;
         V_STR_RAW := UTL_I18N.STRING_TO_RAW(V_STR,'UTF8') ;
         V_TYPE := DBMS_CRYPTO.ENCRYPT_AES128+DBMS_CRYPTO.CHAIN_ECB+DBMS_CRYPTO.PAD_PKCS5 ;
         V_STR_RAW := DBMS_CRYPTO.ENCRYPT(SRC => V_STR_RAW , typ => V_TYPE, key => V_KEY_RAW) ;
         V_RETURN_STR := utl_raw.cast_to_varchar2(utl_encode.base64_encode(V_STR_RAW));
         RETURN V_RETURN_STR ;
	 END;
	END IF ;
END;
-- 解密
create or replace FUNCTION FUN_DECRYPTION(
V_STR VARCHAR2
)
RETURN VARCHAR2
AS
V_KEY_RAW RAW(16) ;
V_STR_RAW RAW(2000) ;
V_RETURN_STR VARCHAR2(2000) ;
V_TYPE PLS_INTEGER ;
BEGIN
	IF V_STR IS NULL OR V_STR = 'null' THEN 
	 BEGIN 
		 RETURN V_STR;
	 END;
	ELSE 
	 BEGIN 
		 V_KEY_RAW := UTL_I18N.STRING_TO_RAW('vU4C!~0_HQtlU_p@','UTF8') ;
         V_STR_RAW := utl_encode.base64_decode(utl_raw.cast_to_raw((V_STR)));
         V_TYPE := DBMS_CRYPTO.ENCRYPT_AES128+DBMS_CRYPTO.CHAIN_ECB+DBMS_CRYPTO.PAD_PKCS5 ;
         V_STR_RAW := DBMS_CRYPTO.DECRYPT(SRC => V_STR_RAW , typ => V_TYPE, key => V_KEY_RAW ) ;
         V_RETURN_STR := UTL_I18N.RAW_TO_CHAR(V_STR_RAW,'UTF8');
         RETURN V_RETURN_STR ;
	 END;
	END IF ;
END;

2.示例以及說明

sql如下(示例):

/**
 * 擁有對應權限項才能正常執(zhí)行sql
**/
SELECT FUN_ENCRYPTION('4564879512346895654') FROM dual;
SELECT FUN_DECRYPTION('sQtqbsu/05NDCngxv/3al84bdzwtIFG91Zr6hZDpOvE=') FROM dual;

3.java程序代碼以及對應說明

package com.fang.common.util;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;

/**
 * @Author LemonOvO
 * @Date 2022/8/31 10:10
 * @Version 1.0
 * @Description 對應的加密解密方法 適用項目是SpringBoot項目 加密key配置在Apollo中,若無配置可以
 * 使用靜態(tài)常量寫死在代碼之中
 * @Project xxxx
 */
@Slf4j
@Component
public class AesEncoder {

    @Value("${database.encrypt.key:vU4C!~0_HQtlU_p@}")
    private void setsKey(String sKey) {
        AesEncoder.S_KEY = sKey;
    }

    private static String S_KEY;

    // 加密
    public static String encrypt(String sSrc) throws Exception {

        if(Utils.isBlank(sSrc)){
            return sSrc;
        }

        if (S_KEY == null) {
            System.out.print("Key為空null");
            return null;
        }
        // 判斷Key是否為16位
        if (S_KEY.length() != 16) {
            System.out.print("Key長度不是16位");
            return null;
        }
        byte[] raw = S_KEY.getBytes(StandardCharsets.UTF_8);
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        //"算法/模式/補碼方式"
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
        byte[] encrypted = cipher.doFinal(sSrc.getBytes(StandardCharsets.UTF_8));

        //此處使用BASE64做轉碼功能,同時能起到2次加密的作用。
        return new BASE64Encoder().encode(encrypted);
    }

    // 解密
    public static String decrypt(String sSrc) throws Exception {
        try {
            // 判斷Key是否正確
            if (S_KEY == null) {
                System.out.print("Key為空null");
                return null;
            }
            // 判斷Key是否為16位
            if (S_KEY.length() != 16) {
                System.out.print("Key長度不是16位");
                return null;
            }
            byte[] raw = S_KEY.getBytes(StandardCharsets.UTF_8);
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, skeySpec);
            //先用base64解密
            byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);
            try {
                byte[] original = cipher.doFinal(encrypted1);
                return new String(original, StandardCharsets.UTF_8);
            } catch (Exception e) {
                log.error("數(shù)據(jù)庫解密失敗:", e);
                return null;
            }
        } catch (Exception ex) {
            log.error("數(shù)據(jù)庫解密失敗:", ex);
            return null;
        }
    }


    /**
     * 加密字符
     *
     * @param source 來源字符串   例:17799999999
     * @param begin  字符串加密開頭保留的明文長度  例:3
     * @param end    字符串加密結尾處保留的明文長度  例:4
     * @return 加密后結果  例:177****9999
     */
    public static String encryptString(String source, Integer begin, Integer end) {
        if(Utils.isBlank(source)){
            return source;
        }
        int length = source.length();
        if (begin >= length) {
            return encryptRule(source);
        }
        if (begin < 0) {
            begin = 0;
        }
        if (end < 0) {
            end = 0;
        }
        char[] chars = source.toCharArray();
        char[] result = new char[chars.length];
        for (int i = 0; i < chars.length; i++) {
            if (i >= begin) {
                if (i >= (length - end)) {
                    result[i] = chars[i];
                } else {
                    result[i] = '*';
                }
            } else {
                result[i] = chars[i];
            }
        }
        String encrypt = String.valueOf(result);
        if (encrypt.contains("*")) {
            return encrypt;
        } else {
            return encryptRule(encrypt);
        }
    }

    private static String encryptRule(String source) {
        char[] chars = source.toCharArray();
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < chars.length; i++) {
            stringBuilder.append("*");
        }
        return stringBuilder.toString();
    }


    public static void main(String[] args) throws Exception {
        /*
         * 此處使用AES-128-ECB加密模式,key需要為16位。
         */
        String cKey = "GISQvI1Wk@@Lz7%?";
        // 需要加密的字串
        String cSrc = "zhangsan";
        System.out.println(cSrc);
        // 加密
        String enString = AesEncoder.encrypt(cSrc);
        System.out.println("加密后的字串是:" + enString);

        // 解密
        String deString = AesEncoder.decrypt(enString);
        System.out.println("解密后的字串是:" + deString);
    }
}


總結

參考文獻地址:Mysql Oracle java 通用aes加密文章來源地址http://www.zghlxwxcb.cn/news/detail-557947.html

到了這里,關于數(shù)據(jù)庫加密AES 適用 Mysql Oracle 以及java的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 數(shù)據(jù)庫去重(MYSQL和ORACLE)

    一、數(shù)據(jù)庫中的去重操作(刪除數(shù)據(jù)庫中重復記錄的SQL語句)主要有三種方法 (1)、rowid方法 (2)、group by 方法 (3)、distinct方法 1、用rowid方法 根據(jù)Oracle帶的rowid屬性,可以進行判斷是否存在重復語句; (1)、查出表1和表2中name相同的數(shù)據(jù) Select * from table1 a Where rowid !=

    2024年02月09日
    瀏覽(28)
  • Mysql中的對數(shù)據(jù)庫字段的數(shù)據(jù)進行加密

    Mysql中的對數(shù)據(jù)庫字段的數(shù)據(jù)進行加密

    注意點:此處只對name字段進行了字段類型的修改。 ENCODE(\\\'123\\\',\\\'123\\\'): 第一個123:表示插入數(shù)據(jù)庫中的數(shù)據(jù)(即將要被轉換的數(shù)據(jù)) 第二個123:表示轉換秘鑰,可以任意起名。在解密的時候會需要用到。 結果: 注意點1 :此處DECODE的兩個參數(shù)分別為 需要解密的內容(數(shù)據(jù)庫中

    2024年02月09日
    瀏覽(19)
  • 從 Oracle 到 MySQL 數(shù)據(jù)庫的遷移之旅

    從 Oracle 到 MySQL 數(shù)據(jù)庫的遷移之旅

    目錄 引言 一、前期準備工作 1.搭建新的MySQL數(shù)據(jù)庫 2 .建立相應的數(shù)據(jù)表 2.1 數(shù)據(jù)庫兼容性分析 2.1.1 字段類型兼容性分析 2.1.2 函數(shù)兼容性分析 2.1.3 是否使用存儲過程?存儲過程的個數(shù)?復雜度? 2.1.4 是否使用觸發(fā)器?個數(shù)?使用的場景? 2.2 建表過程中其他需要注意的事項

    2024年04月11日
    瀏覽(24)
  • 查詢Oracle和MySQL數(shù)據(jù)庫中當前所有連接信息

    查詢Oracle當前所有連接信息: 查詢MySQL當前所有連接信息: 在這兩個查詢中,我為每個字段添加了中文別名,以提高查詢結果的可讀性

    2024年02月12日
    瀏覽(35)
  • docker安裝mysql、clickhouse、oracle等各種數(shù)據(jù)庫匯總

    docker安裝mysql、clickhouse、oracle等各種數(shù)據(jù)庫匯總

    1:docker 安裝mongo數(shù)據(jù)庫并使用 官網(wǎng):https://www.mongodb.com/docs/manual/ mongo shell教程1:http://c.biancheng.net/mongodb2/connection.html 安裝1 :https://www.zhihu.com/question/54602953/answer/3047452434?utm_id=0 安裝2:https://www.duidaima.com/Group/Topic/ArchitecturedDesign/9182 使用驅動進行java開發(fā):https://mongodb.github.

    2024年02月10日
    瀏覽(23)
  • 從MySQL遷移到Oracle數(shù)據(jù)庫的詳細步驟和方法

    在一些情況下,可能需要將現(xiàn)有的MySQL數(shù)據(jù)庫遷移到Oracle數(shù)據(jù)庫。本文將詳細介紹如何進行這一遷移過程,涵蓋了備份、轉換和導入等關鍵步驟,以幫助你順利完成數(shù)據(jù)庫遷移。 在開始遷移之前,務必備份你的MySQL數(shù)據(jù)庫,以便在出現(xiàn)問題時可以還原數(shù)據(jù)。 確保你已經(jīng)安裝了

    2024年02月08日
    瀏覽(32)
  • DataGrip連接數(shù)據(jù)庫設置(MySQL、Oracle、SQL Server)

    DataGrip連接數(shù)據(jù)庫設置(MySQL、Oracle、SQL Server)

    1.1 配置信息 1.2 測試查詢employees庫中departments表信息 employees為測試庫,具體來源,參考這篇文章 下載并導入MySQL示例數(shù)據(jù)庫employees 。 1.3 測試查詢employees庫中employees表信息 將SID改為orcl: 3.1 打開DG后新建Data Source-Microsoft SQL Server 下載驅動文件后按圖中配置: 3.2 開啟Named Pipes和

    2024年02月12日
    瀏覽(40)
  • Spring Boot學習隨筆- Jasypt加密數(shù)據(jù)庫用戶名和密碼以及解密

    Spring Boot學習隨筆- Jasypt加密數(shù)據(jù)庫用戶名和密碼以及解密

    學習視頻:【編程不良人】2021年SpringBoot最新最全教程 Jasypt 全稱是Java Simplified Encryption,是一個開源項目。 Jasypt與Spring Boot集成,以便在應用程序的屬性文件中加密敏感信息,然后在應用程序運行時解密這些信息。 可以使用 jasypt-spring-boot-starter 這個依賴項。從而實現(xiàn)屬性源

    2024年02月04日
    瀏覽(28)
  • 使用Apache Doris自動同步整個 MySQL/Oracle 數(shù)據(jù)庫進行數(shù)據(jù)分析

    使用Apache Doris自動同步整個 MySQL/Oracle 數(shù)據(jù)庫進行數(shù)據(jù)分析

    Flink-Doris-Connector 1.4.0 允許用戶一步將包含數(shù)千個表的整個數(shù)據(jù)庫(MySQL或Oracle )攝取到Apache Doris(一種實時分析數(shù)據(jù)庫)中。 通過內置的Flink CDC,連接器可以直接將上游源的表模式和數(shù)據(jù)同步到Apache Doris,這意味著用戶不再需要編寫DataStream程序或在Doris中預先創(chuàng)建映射表。

    2024年02月09日
    瀏覽(21)
  • 主流數(shù)據(jù)庫(SQL Server、Mysql、Oracle)通過sql實現(xiàn)多行數(shù)據(jù)合為一行

    主流數(shù)據(jù)庫(SQL Server、Mysql、Oracle)通過sql實現(xiàn)多行數(shù)據(jù)合為一行

    1、方法一:使用 STUFF 和 FOR XML PATH 進行多行合并成一行 (1)FOR XML PATH用法 FOR XML 是 SQL Server 提供的一種功能,允許您將查詢結果轉換為 XML 格式。 PATH 模式則是其中一種靈活的方式來構造自定義的XML結構。 1、基本字符串連接 : 當您想從單列中提取所有行的數(shù)據(jù)并連接成一

    2024年04月10日
    瀏覽(94)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包