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

Golang如何構(gòu)造最佳隨機密碼詳解

 更新時間:2023年01月04日 15:00:54   作者:夢想畫家  
人們往往有使用同一密碼的習(xí)慣,為了防止數(shù)據(jù)庫意外泄露/破壞和出于保護用戶隱私的目的,下面這篇文章主要給大家介紹了關(guān)于Golang如何構(gòu)造最佳隨機密碼的相關(guān)資料,需要的朋友可以參考下

為了保護系統(tǒng)或數(shù)據(jù)安全,我們需要最佳隨機密碼。這里使用unix系統(tǒng)定義的文件設(shè)備/dev/random,從中獲取隨機數(shù)生成器的種子。

需求說明

定義程序goodPass.go,程序需要一個可選命令行參數(shù),指定生成密碼的長度,缺省長度為10. 另外生成密碼的ASCII從!z,對應(yīng)ascii碼為33到122。

程序第一部分是導(dǎo)入相應(yīng)的包:

package main

import (
	"encoding/binary"
	"fmt"
	"math/rand"
	"os"
	"path/filepath"
	"strconv"
)

var MAX = 90
var MIN = 0

// Intn returns, as an int, a non-negative pseudo-random number in the half-open interval [0,n)
// from the default Source.
// It panics if n <= 0.
func random(min, max int) int {
	return rand.Intn(max-min) + min
}

這里radmon函數(shù)生成一定范圍內(nèi)的,Intn()結(jié)果不包括末端數(shù)值。下面實現(xiàn)main函數(shù),處理命令行參數(shù),并從隨機文件設(shè)備中獲取隨機種子:

func main() {
	var LENGTH int64 = 10
	if len(os.Args) != 2 {
		fmt.Printf("usage: %s length\n", filepath.Base(os.Args[0]))
		//os.Exit(1)
		fmt.Printf("Default length is %d\n", LENGTH)
	} else {
		LENGTH, _ = strconv.ParseInt(os.Args[1], 10, 64)
	}

	f, _ := os.Open("/dev/random")
	var seed int64

	_ = binary.Read(f, binary.LittleEndian, &seed)
	_ = f.Close()

	rand.Seed(seed)
	fmt.Println("Seed:", seed)

    GenPass(LENGTH)
}

首先處理命令行參數(shù),如果沒有指定長度,則取默認(rèn)值10,否則解析命令行參數(shù)。

然后打開/dev/random 設(shè)備進行讀取,這里使用binary.Read是需要指定字節(jié)順序(binary.LittleEndian),這是為了構(gòu)建int64類型,而不是獲得一串字節(jié)。這里為了展示如何從二進制文件讀內(nèi)容至Go類型。

binary.Read(f, binary.LittleEndian, &seed) 函數(shù)的源碼注釋為:

// Read reads structured binary data from r into data. 
// Data must be a pointer to a fixed-size value or a slice of fixed-size values. 
// Bytes read from r are decoded using the specified byte order and written to successive fields of the data. 
// When decoding boolean values, a zero byte is decoded as false, and any other non-zero byte is decoded as true.

最后一部分代碼為:

func GenPass(LENGTH int64) {
	startChar := "!"
	var i int64
	for i = 0; i < LENGTH; i++ {
		anInt := random(MIN, MAX)
		newChar := string(startChar[0] + byte(anInt))
		if newChar == " " {
			i = i - i
			continue
		}
		fmt.Print(newChar)
	}
	fmt.Println()
}

我們看到Go處理Ascii字符有點奇怪,這是因為Go默認(rèn)支持Unicode字符。因此需要轉(zhuǎn)換整數(shù)值ascii字符,對應(yīng)代碼為:

newChar := string(startChar[0] + byte(anInt))

運行程序,生成下列輸出:

$ go run goodPass.go 1
Seed: -5195038511418503382
b

$ go run goodPass.go 10
Seed: 8492864627151568776
k43Ve`+YD)

$ go run goodPass.go 50
Seed: -4276736612056007162
!=Gy+;XV>6eviuR=ST\u:Mk4Q875Y4YZiZhq&q_4Ih/]''`2:x

總結(jié)

到此這篇關(guān)于Golang如何構(gòu)造最佳隨機密碼的文章就介紹到這了,更多相關(guān)Golang最佳隨機密碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go一站式配置管理工具Viper的使用教程

    Go一站式配置管理工具Viper的使用教程

    Viper是一個方便Go語言應(yīng)用程序處理配置信息的庫,它可以處理多種格式的配置,這篇文章主要為大家介紹了它的具體使用教程,需要的可以參考下
    2023-08-08
  • 解決Go?Json?Unmarshal反序列化丟失數(shù)字精度問題

    解決Go?Json?Unmarshal反序列化丟失數(shù)字精度問題

    業(yè)務(wù)會使用?id生成器?產(chǎn)生的?分布式唯一ID,長度比較長,所以代碼反序列化時,會出現(xiàn)精度丟失問題,那如何解決呢,下面小編就來和大家詳細講講
    2023-08-08
  • Go設(shè)計模式之代理模式圖文詳解

    Go設(shè)計模式之代理模式圖文詳解

    這篇文章將通過圖文講解給大家詳細的介紹一下Go代理模式,代理模式是一種結(jié)構(gòu)型設(shè)計模式,代理控制著對于原對象的訪問, 并允許在將請求提交給對象前后進行一些處理,感興趣的同學(xué)跟著小編一起來看看吧
    2023-07-07
  • 一文帶你了解Go語言中的指針和結(jié)構(gòu)體

    一文帶你了解Go語言中的指針和結(jié)構(gòu)體

    前面的兩篇文章對?Go?語言的基礎(chǔ)語法和基本數(shù)據(jù)類型以及幾個復(fù)合數(shù)據(jù)類型進行介紹,本文將對?Go?里面的指針和結(jié)構(gòu)體進行介紹,也為后續(xù)文章做鋪墊,感興趣的可以了解一下
    2022-11-11
  • golang 中strings包的Replace的使用說明

    golang 中strings包的Replace的使用說明

    這篇文章主要介紹了golang 中strings包的Replace的使用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Go Plugins插件的實現(xiàn)方式

    Go Plugins插件的實現(xiàn)方式

    目前 Plugins 僅在 Linux、FreeBSD 和 macOS 上受支持,且只支持 golang 調(diào)用,今天通過本文給大家介紹Go Plugins插件的實現(xiàn)方式,感興趣的朋友一起看看吧
    2021-08-08
  • golang-切片slice的創(chuàng)建方式

    golang-切片slice的創(chuàng)建方式

    這篇文章主要介紹了golang-切片slice的創(chuàng)建方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Go語言中實現(xiàn)Unix風(fēng)格的進程管道方法實例

    Go語言中實現(xiàn)Unix風(fēng)格的進程管道方法實例

    這篇文章主要為大家介紹了Go語言中實現(xiàn)Unix風(fēng)格的進程管道方法實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • Golang實現(xiàn)Json轉(zhuǎn)結(jié)構(gòu)體的示例詳解

    Golang實現(xiàn)Json轉(zhuǎn)結(jié)構(gòu)體的示例詳解

    這篇文章主要為大家詳細介紹了Golang實現(xiàn)Json轉(zhuǎn)結(jié)構(gòu)體的方法,文中的示例代碼講解詳細,對學(xué)習(xí)Go語言有一定的幫助,需要的可以參考一下
    2023-02-02
  • Go結(jié)合Redis用最簡單的方式實現(xiàn)分布式鎖

    Go結(jié)合Redis用最簡單的方式實現(xiàn)分布式鎖

    本文主要介紹了Go結(jié)合Redis用最簡單的方式實現(xiàn)分布式鎖示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評論

喀喇| 富阳市| 奎屯市| 龙口市| 临海市| 桐城市| 巴东县| 丰顺县| 汨罗市| 西充县| 云龙县| 稷山县| 琼结县| 房产| 荣昌县| 城步| 平舆县| 清水河县| 张北县| 射洪县| 长治市| 金平| 涟源市| 龙口市| 加查县| 苏尼特右旗| 惠安县| 马尔康县| 定南县| 日土县| 南澳县| 措勤县| 北辰区| 穆棱市| 蓬莱市| 理塘县| 黄陵县| 商水县| 武清区| 高淳县| 虎林市|