最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go實現(xiàn)數(shù)據(jù)脫敏的方案設(shè)計

 更新時間:2024年05月19日 09:48:39   作者:小雄Ya  
在一些常見的業(yè)務(wù)場景中可能涉及到用戶的手機(jī)號,銀行卡號等敏感數(shù)據(jù),對于這部分的數(shù)據(jù)經(jīng)常需要進(jìn)行數(shù)據(jù)脫敏處理,就是將此部分?jǐn)?shù)據(jù)隱私化,防止數(shù)據(jù)泄露,所以本文給大家介紹了Go實現(xiàn)數(shù)據(jù)脫敏的方案設(shè)計,需要的朋友可以參考下

前言

在一些常見的業(yè)務(wù)場景中可能涉及到用戶的手機(jī)號,銀行卡號等敏感數(shù)據(jù),對于這部分的數(shù)據(jù)經(jīng)常需要進(jìn)行數(shù)據(jù)脫敏處理,就是將此部分?jǐn)?shù)據(jù)隱私化,防止數(shù)據(jù)泄露。但是在生產(chǎn)環(huán)境中,數(shù)據(jù)一般都是實時的,且在進(jìn)行脫敏操作時不能影響正常的業(yè)務(wù)使用。

脫敏方案

脫敏方案一般會采用以下方式:

  • 數(shù)據(jù)部分脫敏:只對部分內(nèi)容脫敏,保留一些關(guān)鍵部分,比如人名保留姓氏,其他使用星號或者其他占位符代替。
  • 數(shù)據(jù)完全脫敏:對整個數(shù)據(jù)進(jìn)行脫敏,完全隱藏所有數(shù)據(jù),比如整個數(shù)據(jù)都是用占位符代替或者是用其他隨機(jī)生成的數(shù)據(jù)替換。
  • 數(shù)據(jù)加密:直接對數(shù)據(jù)進(jìn)行加密,其實就是完全脫敏。加密方式更多用在數(shù)據(jù)傳輸或存儲的過程中。比如接口傳輸時加密某字段數(shù)據(jù)防止請求被攔截時數(shù)據(jù)泄露。
  • 數(shù)據(jù)刪除,對于一些沒有必要且不再使用的數(shù)據(jù)應(yīng)當(dāng)直接刪除。

詳細(xì)設(shè)計

基本脫敏方法

就目前我所使用的場景,遇到比較多的是將在展示時對數(shù)據(jù)進(jìn)行部分脫敏后再展示,使用占位符替換。

// 部分?jǐn)?shù)據(jù)脫敏
func PlaceholderHandle(data string) string {
    if len(data) <= 4 {
    		return strings.Repeat("*", len(data))
    	}
    	return data[:3] + strings.Repeat("*", len(data)-7) + data[len(data)-4:]
}

// 完全數(shù)據(jù)脫敏
func PlaceFullHandle(){
  return strings.Repeat("*", len(data))  
}

// 使用MD5對數(shù)據(jù)進(jìn)行加密
func GetMD5Hash(data string) string {
	hash := md5.Sum([]byte(text))
	return hex.EncodeToString(hash[:])
}

// 使用AES算法對數(shù)據(jù)進(jìn)行加密
func Encrypt(data []byte, key []byte) ([]byte, error) {
	block, err := aes.NewCipher(key)
	if err != nil {
		return nil, err
	}

	ciphertext := make([]byte, aes.BlockSize+len(data))
	iv := ciphertext[:aes.BlockSize]
	if _, err := io.ReadFull(rand.Reader, iv); err != nil {
		return nil, err
	}

	stream := cipher.NewCFBEncrypter(block, iv)
	stream.XORKeyStream(ciphertext[aes.BlockSize:], data)

	return ciphertext, nil
}

// 使用AES算法對數(shù)據(jù)進(jìn)行解密
func Decrypt(data []byte, key []byte) ([]byte, error) {
	block, err := aes.NewCipher(key)
	if err != nil {
		return nil, err
	}

	if len(data) < aes.BlockSize {
		return nil, fmt.Errorf("ciphertext too short")
	}

	iv := data[:aes.BlockSize]
	data = data[aes.BlockSize:]

	stream := cipher.NewCFBDecrypter(block, iv)
	stream.XORKeyStream(data, data)

	return data, nil
}

md5 是不可逆的,所以如果使用MD5 加密的話就數(shù)據(jù)就無法解密,如果使用MD5加密的話更適合的場景就是用于數(shù)據(jù)加密后沒有其他用處。所以如果希望加密后再解密可以使用AES 對稱加密算法進(jìn)行加解密,其還支持使用Key 進(jìn)行加密。

脫敏模塊

場景

  • 項目中很多個模塊都需要進(jìn)行數(shù)據(jù)脫敏
  • 數(shù)據(jù)脫敏的規(guī)則復(fù)雜,不同數(shù)據(jù)類型,不同場景,不同角色有不同的脫敏規(guī)則
  • 脫敏規(guī)則多變時需要有個統(tǒng)一管理中心,可以增加其靈活性,特別遇到動態(tài)更新的需求時可以增加可配置功能

功能模塊劃分:

當(dāng)遇到以上點(diǎn)可以考慮設(shè)計一個專門進(jìn)行數(shù)據(jù)脫敏的模塊,以便統(tǒng)一管理和調(diào)度數(shù)據(jù)脫敏邏輯從而保證數(shù)據(jù)脫敏的一致性和規(guī)范性。一個簡單的數(shù)據(jù)脫敏模塊大致劃分三個模塊:

  • 數(shù)據(jù)源:獲取數(shù)據(jù)源,來源支持文件,數(shù)據(jù)庫或其他數(shù)據(jù)源
  • 解析器:解析數(shù)據(jù)源并對提取需要脫敏的字段
  • 脫敏策略引擎:根據(jù)不同的規(guī)則對數(shù)據(jù)進(jìn)行脫敏處理

數(shù)據(jù)源可以使用 工廠函數(shù),根據(jù)數(shù)據(jù)源類型創(chuàng)建對應(yīng)數(shù)據(jù)源實例從而調(diào)用方法 GetData 獲取相應(yīng)的數(shù)據(jù)源,后續(xù)可以增加其他數(shù)據(jù)源時只需要再工廠函數(shù)增加類型和對應(yīng)的實例創(chuàng)建。

type DataSource interface {
	GetData() []byte
}

type UserDbSource struct {
}

func (p *UserDbSource) GetData() []byte {
	return nil
}

type OrderDbSource struct {
	dbName string
}

func (p *OrderDbSource) GetData() []byte {
	return nil
}

type ThirdpartySource struct {
	url string
}

func (p *ThirdpartySource) GetData() []byte {
	return nil
}

type DataSourceFactory struct {
}

func (p *DataSourceFactory) CreateDataSource(sourceType string, sourceConfig string) DataSource {
	switch sourceType {
	case "file":
		return &FileSource{filePath: sourceConfig}
	case "thirdparty":
		return &ThirdpartySource{url: sourceConfig}
	case "orderDb":
		return &OrderDbSource{dbName: sourceConfig}
	case "userDb":
		return &UserDbSource{}
	}
	return nil
}

數(shù)據(jù)脫敏引擎使用策略模式,先定義不同的脫敏規(guī)則,并通過DataMaskCore接口統(tǒng)一了脫敏方法。在初始化DataMask結(jié)構(gòu)體可以根據(jù)傳入不同脫敏策略,然后在進(jìn)行脫敏處理時根據(jù)不同的脫敏規(guī)則進(jìn)行處理。這樣可以實現(xiàn)根據(jù)不同規(guī)則進(jìn)行不同的脫敏處理,使代碼更加靈活和可擴(kuò)展。

type DataMaskCore interface {
	DoMask(data string)
}

// 脫敏規(guī)則1
type MaskingRule1 struct{}

func (mr1 *MaskingRule1) DoMask(data string) string {
	// 實現(xiàn)脫敏規(guī)則1的邏輯
	return "Masked Data 1"
}

// 脫敏規(guī)則2
type MaskingRule2 struct{}

func (mr2 MaskingRule2) DoMask(data string) string {
	// 實現(xiàn)脫敏規(guī)則2的邏輯
	return "Masked Data 2"
}

type DataMask struct {
	Strategy DataMaskCore
}

func NewDataMask(strategy DataMaskCore) *DataMask {
	return &DataMask{
		Strategy: strategy,
	}
}

// 根據(jù)不同規(guī)則進(jìn)行不同的脫敏處理
func (p *DataMask) MaskData(data string) {
	p.Strategy.DoMask(data)
}

簡單概述,數(shù)據(jù)脫敏其實本質(zhì)就是對數(shù)據(jù)不可直接展示。根據(jù)自身需求對數(shù)據(jù)敏感度,可使用簡單處理方式就是對數(shù)據(jù)進(jìn)行占位符代替,或者直接加密處理。如果是沒有用處的數(shù)據(jù)直接暴力解決—刪除。

以上就是Go實現(xiàn)數(shù)據(jù)脫敏的方案設(shè)計的詳細(xì)內(nèi)容,更多關(guān)于Go數(shù)據(jù)脫敏的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 解決go mod私有倉庫拉取的問題

    解決go mod私有倉庫拉取的問題

    這篇文章主要介紹了解決go mod私有倉庫拉取的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • 一文掌握Go語言并發(fā)編程必備的Mutex互斥鎖

    一文掌握Go語言并發(fā)編程必備的Mutex互斥鎖

    Go 語言提供了 sync 包,其中包括 Mutex 互斥鎖、RWMutex 讀寫鎖等同步機(jī)制,本篇博客將著重介紹 Mutex 互斥鎖的基本原理,需要的可以參考一下
    2023-04-04
  • Go與Rust高性能解析JSON實現(xiàn)方法示例

    Go與Rust高性能解析JSON實現(xiàn)方法示例

    這篇文章主要為大家介紹了Go與Rust高性能的解析JSON實現(xiàn)方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • golang兩種調(diào)用rpc的方法

    golang兩種調(diào)用rpc的方法

    這篇文章主要介紹了golang兩種調(diào)用rpc的方法,結(jié)合實例形式分析了Go語言調(diào)用rpc的原理與實現(xiàn)方法,需要的朋友可以參考下
    2016-07-07
  • Golang 空結(jié)構(gòu)體特性與用法詳解

    Golang 空結(jié)構(gòu)體特性與用法詳解

    本文主要介紹了Golang 空結(jié)構(gòu)體特性與用法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-03-03
  • Go利用GJSON組件解鎖JSON讀取新姿勢

    Go利用GJSON組件解鎖JSON讀取新姿勢

    Go 標(biāo)準(zhǔn)庫提供了 encoding/json 包用于處理 json 數(shù)據(jù),同時第三方庫 GJSON & SJSON 也在 json 處理方面表現(xiàn)出色,下面我們就來看看如何使用GJSON解鎖JSON讀取新方法吧
    2025-03-03
  • 使用Go和Tesseract實現(xiàn)驗證碼識別的流程步驟

    使用Go和Tesseract實現(xiàn)驗證碼識別的流程步驟

    驗證碼主要用于區(qū)分人類用戶和機(jī)器程序,Tesseract 是一個開源的光學(xué)字符識別(OCR)引擎,支持多種語言和字體,并具有較高的識別準(zhǔn)確率,它由 Google 維護(hù),并且可以通過多種編程語言調(diào)用,本文給大家介紹了使用Go和Tesseract實現(xiàn)驗證碼識別的流程步驟
    2025-01-01
  • Go語言使用Timeout Context取消任務(wù)的實現(xiàn)

    Go語言使用Timeout Context取消任務(wù)的實現(xiàn)

    本文主要介紹了Go語言使用Timeout Context取消任務(wù)的實現(xiàn),包括基本的任務(wù)取消和控制HTTP客戶端請求的超時,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • Golang 負(fù)載均衡算法實現(xiàn)示例

    Golang 負(fù)載均衡算法實現(xiàn)示例

    在Go語言中,負(fù)載均衡算法通常由代理、反向代理或者應(yīng)用層負(fù)載均衡器來實現(xiàn),在這些實現(xiàn)中,有一些經(jīng)典的負(fù)載均衡算法,跟隨本文來一一探究
    2024-01-01
  • Go語言標(biāo)準(zhǔn)庫中math模塊詳細(xì)功能介紹與示例代碼

    Go語言標(biāo)準(zhǔn)庫中math模塊詳細(xì)功能介紹與示例代碼

    Go語言的標(biāo)準(zhǔn)庫math提供了一系列基礎(chǔ)數(shù)學(xué)函數(shù)和常量,用于進(jìn)行科學(xué)計算、幾何計算和其他數(shù)學(xué)相關(guān)的操作,這篇文章主要介紹了Go語言標(biāo)準(zhǔn)庫中math模塊詳細(xì)功能介紹與示例代碼,需要的朋友可以參考下
    2025-03-03

最新評論

安西县| 霍林郭勒市| 江安县| 织金县| 石阡县| 揭东县| 吴江市| 石家庄市| 页游| 务川| 凉城县| 远安县| 上栗县| 阆中市| 西乌珠穆沁旗| 白玉县| 临桂县| 辽阳县| 和静县| 沂源县| 化州市| 白城市| 枝江市| 日照市| 石景山区| 当阳市| 吴堡县| 塔河县| 西贡区| 泰兴市| 绥滨县| 成都市| 恩平市| 南昌市| 扬中市| 八宿县| 北辰区| 加查县| 徐闻县| 裕民县| 军事|