在Go中创建随机的安全密码

 更新时间:2018年10月10日 11:02:16   作者:Mihalis Tsoukalos  
今天小编就为大家分享一篇关于在Go中创建随机的安全密码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

Go的随机数生成器是生成难以猜出的密码的一种很好的方法。

属性提供的随机数生成器。GO编程语言生成由ASCII字符组成的难以猜测的密码。尽管本文中提供的代码很容易阅读,但最好已经知道了解它的基本知识。如果您对编程语言不熟悉,要去参观学习,然后回到这里。

在进入实用程序和代码之前,请查看ASCII表的以下子集,如man ascii指挥:

 30 40 50 60 70 80 90 100 110 120
 ---------------------------------
0: ( 2 < F P Z d n x
1: ) 3 = G Q [ e o y
2: * 4 > H R \ f p z
3: ! + 5 ? I S ] g q {
4: " , 6 @ J T ^ h r |
5: # - 7 A K U _ i s }
6: $ . 8 B L V ` j t ~
7: % / 9 C M W a k u DEL
8: & 0 : D N X b l v
9: ' 1 ; E O Y c m w

可打印的ASCII字符的十进制值从33到126不等;其他ASCII值不适合包含在密码中。因此,本文中提供的实用程序将在该范围内生成ASCII字符。

创建随机整数

第一个实用程序名为random.go,并生成驻留在给定范围内的指定数目的随机整数。最重要的部分random.go这一职能是:

randommin max 
return randIntnmaxmin min

此函数使用RAND.In()go函数生成属于给定范围的随机整数。注意,rand.Intn()返回一个属于[0,n]的非负随机数;你可以在数学/RAND文档中找到数学/RAND包的文档。

random.go实用工具接受三个命令行参数:生成整数的最小值、最大值和将要生成的整数。

编译和执行random.go将创建这样的输出:

$ go build random.go
$ ./random
Usage: ./random MIX MAX TOTAL
$ ./random 1 3 10
2 2 1 2 2 1 1 2 2 1

如果您希望在GO中生成更安全的随机数,请使用GO库的密码/ RAND包。

创建随机密码

第二个实用工具,randomPass.go生成随机密码。randomPass.go使用random()函数生成将使用以下GO代码转换为ASCII字符的随机数:

for {
myRand := random(MIN, MAX)
newChar := string(startChar[0] + byte(myRand))
fmt.Print(newChar)
if i == LENGTH {
break
}
i++ }

最小值为0而Max的价值是94的价值startChar是!,它是ASCII表中的第一个可打印字符(其十进制ASCII代码为33)因此,将生成的所有ASCII字符都位于!而在~字符,该字符的十进制ASCII代码为126.

因此,生成的每个随机数都大于min,小于MAX,并转换为ASCII字符。进程继续进行,直到生成的密码具有所需的长度。
randomPass.go实用工具接受一个(可选的)命令行参数,该参数定义生成的密码的长度。它的默认值是8,这是一个相当常见的密码长度。执行randomPass.go将生成以下类型的输出:

$ go run randomPass.go 1
Z
$ go run randomPass.go 10
#Cw^a#IwkT
$ go run randomPass.go
Using default values!
[PP8@'Ci

最后一个细节:不要忘了用seed值调用Rand.Seed()来初始化随机数生成器。如果始终使用相同的种子值,随机数生成器将创建相同的随机整数序列。

你可以同时找到random.go和randomPass.go在GitHub。您也可以在play.golang.org.希望这有所帮助

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • go如何利用orm简单实现接口分布式锁

    go如何利用orm简单实现接口分布式锁

    本篇文章主要介绍了go如何利用orm简单实现接口分布式锁,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Go语言学习之Switch语句的使用

    Go语言学习之Switch语句的使用

    这篇文章主要通过一些示例为大家介绍一下Go语言中Switch语句的基本语法以及使用,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-06-06
  • Go语言开发保证并发安全实例详解

    Go语言开发保证并发安全实例详解

    这篇文章主要为大家介绍了Go语言开发保证并发安全实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • 详解如何使用beego orm在postgres中存储图片

    详解如何使用beego orm在postgres中存储图片

    这篇文章主要为大家介绍了如何使用beego orm在postgres中存储图片详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • 详解Go语言中init的使用与常见应用场景

    详解Go语言中init的使用与常见应用场景

    Go 中有一个特别的 init() 函数,它主要用于包的初始化,这篇文章将以此为主题介绍 Go 中 init() 函数的使用和常见使用场景,希望对大家有所帮助
    2024-02-02
  • Go语言panic和recover的用法实例

    Go语言panic和recover的用法实例

    panic()和recover()是Go语言中用于处理错误的两个重要函数,本文主要介绍了Go语言panic和recover的用法实例,panic()用于中止程序并引发panic,而recover()用于捕获panic并恢复程序的执行,感兴趣的可以了解一下
    2024-01-01
  • 浅析Go中关于零值和空值判断的问题

    浅析Go中关于零值和空值判断的问题

    这篇文章主要是对零值和空值判断现状进行简单的梳理和分享,文中的示例代码讲解详细,对我们深入了解go语言有一定的帮助,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-08-08
  • Go异步任务解决方案之Asynq库详解

    Go异步任务解决方案之Asynq库详解

    需要在Go应用程序中异步处理任务? Asynq,简单高效的任务队列实现,下面这篇文章主要给大家介绍了关于Go异步任务解决方案之Asynq库的相关资料,需要的朋友可以参考下
    2023-02-02
  • Go语言中sync.Cond使用详解

    Go语言中sync.Cond使用详解

    本文主要介绍了Go语言中sync.Cond使用详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Go语言列表List获取元素的4种方式

    Go语言列表List获取元素的4种方式

    Golang的列表元素的获取可以使用内置的 Front 函数获取头结点,使用 Back 函数获取尾结点,使用 Prev 获取前一个结点,使用 Next 获取下一个结点,本文就介绍了Go语言列表List获取元素的4种方式,感兴趣的可以了解一下
    2022-04-04

最新评论