Go语言中文网 为您找到相关结果 208

byte数组转str

// string转[]byte a := "hello world" arr := []byte(a) // []byte转string str := fmt.Sprintf("%x", arr) // str := string(arr)//这种转string的方式会出现乱码 顺便给出golang中的sha1算法调用 h := sha1.New() h.Write([]byte(timeStamp + nonce + token)) res := fmt.Sprintf("%x", h.Sum(nil)...阅读全文

博文 2019-01-24 18:34:43 杜子龙

golang中crypto/rc4包

rc4包实现了RC4加密算法,参见Bruce Schneier's Applied Cryptography。 type KeySizeError int func (KeySizeError) Error() string type Cipher struct{...} func NewCipher(key []byte) (*Cipher, error) NewCipher创建并返回一个新的Cipher。参数key时RC4密钥,至少1字节,最多256字节。 func (c *Cipher) Reset() Reset方法会清空密钥数据,以便将其数据从程序内存中清除(以免被破解) func (c *Cipher) XORKeyStream(dst, src []byte) XORKeySt...阅读全文

分享:用四十种语言分别写一个MD5算法 之12 Go语言MD5算法

分享:用四十种语言分别写一个MD5算法 之12 Go语言MD5算法 package main import ( "crypto/md5" "fmt" ) func main() { for _, p := range [][2]string{ } { validate(p[0], p[1]) } } var h = md5.New() func validate(check, s string) { h.Reset() h.Write([]byte(s)) sum := fmt.Sprintf("%x", h.Sum()) if sum != check { fmt.Println("MD5 fail") fmt.Println(" for string,", s) fmt.Println(...阅读全文

博文 2015-06-17 23:01:48 sooch

Go语言如何实现遗传算法

文:Go with Genetic Algorithms 作者:5280incode 翻译:Diwei 出于好玩的心态,我决定学习一下Go语言。我认为学习新语言最好的方法就是深入学习,并且尽可能多犯错误。这样做虽然可能会很慢,但是可以确保在后面的过程中再也不会出现编译的错误。 Go语言与我习惯的其他语言不同。Go更喜欢自己单独实现,而其他像Java这类语言更喜欢继承。其实在Go语言里面根本没有继承这种概念,因为它压根就没有对象这一说法。比如说C语言,它有结构体,但是没有类。但是这样它还是可以有像“构造者”这样的常见思想和设计模式(一种在这种情况下有序地产生结构体的方式)。 Go语言坚决拥护组合(composition),同时也很反对继承的做法,在网络上引起了强烈的讨论,同时也让人们重新思考了...阅读全文

博文 2017-11-14 06:34:53 dev_csdn

[Go 教程系列笔记] 并发介绍

Go 教程系列笔记 Interface 第一部分 Go 教程系列笔记 Interface 第二部分 Go 教程系列笔记 并发介绍 Go 教程系列笔记 goroutine(协程) Go 教程系列笔记 Channel 通道 Go 教程系列笔记 缓冲通道和工作池 Go 教程系列笔记 Select Go 教程系列笔记 Mutex(互斥锁) Go 教程系列笔记 结构而不是类-Go中的OOP Go 教程系列笔记 组合而不是继承-Go 中的 OOP Go 教程系列笔记 多态-Go 中的 OOP Go 是一种并发语言,而不是并行语言。在讨论如何在Go中处理并发之前,我们必须首先了解什么是并发以及它和并行性的区别。 什么是并发? 并发是一次处理大量事情的能力。举个例子: 让我们假设一个人慢跑。在他早晨慢跑时,...阅读全文

博文 2019-08-14 16:02:42 xfstart07

golang JWT 包生成 Token, 验证 Token

简介 json web token 简称 jwt 是一种轻量级的规范 常用与用户认证 大致由 3 部分构成: Header (头部) Payload (载荷) Signature (签名) 用.拼接 Token = Header + '.' + Payload + '.' + Signature Header 用来表明签名的加密算法 token 类型等. { "typ": "JWT", "alg": "HS256"lag } 以上 json 转为 base64 生成 header Payload Payload 记录你需要的信息. 其中应该包含 Claims Claims Audience string json:"aud,omitempty" ExpiresAt int64 json:"e...阅读全文

博文 2019-01-29 08:34:40 w85278161

[golang] Blowfish算法的go实现

最近由于工作的需要,需要的实现一个go的Blowfish算法。其实go本身有一个加密算法库crypto,其中有Blowfish。但是该算法在很多细节上跟我的需求不同,导致最终加密结果千差万别。 Blowfish算法 BlowFish是对称加密算法的其中一种。在很多场景下,作为DES的替代出现。BlowFish并不是直接用我们指定的密钥对数据加密,而是先对密钥进行预处理,然后用处理的结果再对数据加密。解密过程同理。 BlowFish算法内置两个源密钥:pbox和sbox,pbox18位数组,sbox4个256位数组组成。算法在加密解密时,根据两个盒子大量使用位移运算和逻辑位运算。具体的算法细节自行百度/谷歌,本文就不详述了。 GO实现 1. 生成pbox和sbox 几个重要的变量声明 var ...阅读全文

博文 2017-09-24 15:04:55 king_wang

go语言学习笔记之冒泡排序的实现

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 算法原理 冒泡排序算法的运作如下: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较 算法稳定性 冒泡排序是就地排序,且它是稳定的。 算法描述 go语言 package bubblesort //冒泡排序 func BubbleSort(values []int) { flag := true for i := 0; i < len(values)-1; i++ { flag = true for...阅读全文

博文 2015-06-17 23:01:47 wuwenxiang91322

golang mmo游戏 aoi算法

type( //十字链路 GameNode struct { xPrev *GameNode xNext *GameNode yPrev *GameNode yNext *GameNode mObj IGameBase X int Y int } ) var( m_XNode *GameNode m_YNode *GameNode ) //添加到十字链路 func AddNode(node* GameNode){ //x handle var tail *GameNode bFind := false if m_XNode == nil || m_YNode == nil{ m_XNode, m_YNode = node, node return } for curNode := m_XNo...阅读全文

博文 2019-08-12 18:07:33 bobohume

数据结构与算法:二分查找

二分查找是搜索算法中的一种,用来搜索有序数组 二分查找: 是一种简单算法,其输入是一个有序的元素列表(必须有序的原因稍后解释)。如果要查找的元素包含在列表中,二分查找返回其位置;否则返回null。 Javascript ES6实现 /** * 函数binarySearch接受一个有序数组和一个元素。 如果指定的元素包含在数组中, 这个 函数将返回其位置。 你将跟踪要在其中查找的数组部分—— 开始时为整个数组。 */ const binarySearch = (list, item) => { // 数组要查找的范围 // low、high用于跟踪要在其中查找的列表部分 let low = 0 let high = list.length - 1 while(low <= high) { //...阅读全文

常用算法Golang实现

选择排序 package main import ( "fmt" ) func main() { arr := []int{2, 67, 33, 0, 45, 25, 77, 208, -8, -7} selectSort(arr) fmt.Print(arr) } func selectSort(arr []int) { len := len(arr) for i := 0; i < len; i++ { var minIndex int = i for j := i + 1; j < len; j++ { if arr[minIndex] > arr[j] { arr[minIndex], arr[j] = arr[j], arr[minIndex] } } } } 冒泡排序 packa...阅读全文

博文 2017-07-10 06:08:19 冰泡泡薄荷味

golang中crypto/aes包

aes是对称加密算法,这篇博客只介绍怎么使用golang中怎么调用标准库已封装的算法实现,如果是要学习aes算法实现,移步百度 有两个操作:加密和解密 const BlockSize = 16 功能说明:AES算法块(加密数据块)的字节长度。 package main import ( "bytes" "crypto/aes" "crypto/cipher" "log" "fmt" ) // 填充数据 func padding(src []byte, blockSize int) []byte { padNum := blockSize - len(src) % blockSize pad := bytes.Repeat([]byte{byte(padNum)}, padNum) retur...阅读全文

常见加密算法入门

参考 https://www.jianshu.com/p/ce3893a7be09 比特币的加密算法 https://www.jianshu.com/p/57fc42456ab4 分类和简述 常见的密钥加密算法类型大体可以分为三类:对称加密(单秘钥加密)、非对称加密、单向加密(结果唯一且计算过程可重复但是计算不可逆) 对称加密算法 对称加密算法采用单密钥加密,在通信过程中,数据发送方将原始数据分割成固定大小的块,经过密钥和加密算法逐个加密后,发送给接收方;接收方收到加密后的报文后,结合密钥和解密算法解密组合后得出原始数据。由于加解密算法是公开的,因此在这过程中,密钥的安全传递就成为了至关重要的事了。而密钥通常来说是通过双方协商,以物理的方式传递给对方,或者利用第三方平台传递给对方,一旦这过程...阅读全文

博文 2018-12-04 11:34:46 黄靠谱

区分“并发”与“并行”的概念

并发与并行这两个概念是令人困惑的,但在go语言的编程中是必须要理解的。 并发(concurrent) 并发是指两种或两种以上的行为在系统中同时存在,至于这两个行为是否在某一时刻同时“执行”,在并发的概念中并不考虑。在go语言中,go语句可以开启一个新的goroutine,这就典型的并发。不同的goroutines在程序运行期间可能同时存在着, 至于这些goroutines在某一个时刻是不是同时运行, 我们不去关心。事实上, 在单核CPU系统中, goroutines的运转是依赖cpu的时间片轮转算法的,即交替执行。但这的的确确是并发,原因是系统具备了同时处理多种行为的能力。实际上这是一种人类无法直接感知的“伪并行”,只不过从表面上看来,“像是同时执行的”。 并行(parellel) 并行意味...阅读全文

博文 2017-07-29 17:05:19 Dr_Zhang

golang里面和证书相关的几个概念和函数

golang里面和证书相关的几个概念和函数API 什么是PEM, DER 证书是一个结构化的数据结构 结构化的数据结构可以按照ans.1的格式定义成字节流的方式。 把上述字节流使用DER进行编码,就得到证书的DER 把DER进行based64编码,就得到PEM 所以什么是PEM:it's just a base64 encoding of a DER-encoded stream 看一个例子: $ cat cert.pem -----BEGIN CERTIFICATE----- MIICFjCCAbygAwIBAgIUWkRgCi9aADdyFNEjM339ZmwEzdYwCgYIKoZIzj0EAwIw LDEUMBIGA1UEChMLb2JwaW5zdGFuY2UxFDASBgNVBAM...阅读全文

博文 2020-03-05 21:33:06 CodingCode

压测iptables规则条数的限制

前言 今天在使用k8s的时候,由于运用到了calico这个cni插件和k8s自带的NetworkPolicy的功能,就需要考虑到一个性能方面的问题,怎么解释了,由于calico底层使用了iptables来做网络规则的限制,所以每当我们向k8s增加了一个NetworkPolicy的对象的时候,我们就是通过PolicyController往calico的etcd存储里增加记录,然后每个node节点上的calico felix客户端就会读取里面的记录,并对应修改自己的iptables的规则,于是到了这里就会有一个问题抛出来,当我们增加了大量的网络规则之后,我们的iptables的规则数必然会成倍的增加,我们每次查询扫整个iptables表的速度也是下降,那么我们如何保证calico网络的使用效率呢...阅读全文

博文 2019-01-27 23:34:42 Lateautumn_Lin

golang|python简单与运算实现的对称加密算法

package main import ( "fmt" "strconv" "strings" ) func encryptData(code_data string, callback_key string) string { dataArr := []rune(code_data) keyArr := []byte(callback_key) keyLen := len(keyArr) var tmpList []int for index, value := range dataArr { base := int(value) dataString := base + int(0xFF&keyArr[index%keyLen]) tmpList = append(tmpList, da...阅读全文

博文 2018-04-20 16:33:06 AndyHua仔仔

Golang语言常用算法

在学习golang语言,文档看的实在是乏味,就想着把常用的算法做个实现,边写变学习,想来效果还是不错的! 1. 堆排序 package main import "fmt" func buildHeap(array []int, length int) { var i, j int; for i = 1; i < length; i = i + 1 { for j = i; j > 0 && array[j] > array[(j-1)/2]; j = (j - 1)/2 { array[j], array[(j-1)/2] = array[(j-1)/2], array[j] } } } func heapSort(array []int, length int) { array[0], a...阅读全文

博文 2017-05-15 02:42:13 Diogoxiang

Golang差劲的查找prime算法

pips/pip_prime.go package pips type PrimePip struct { } func NewPrimePip() *PrimePip { primePip := &PrimePip{} return primePip } func (primePip *PrimePip) RepeatFn( done <-chan interface{}, fn func() interface{}, ) <-chan interface{} { valueStream := make(chan interface{}) go func() { defer close(valueStream) for { select { case <-done: return case...阅读全文

博文 2019-06-17 23:32:41 FredricZhu

golang 实现的一个遗传算法的例子

# golang 实现的一个遗传算法的例子 **假设有N个任务,需要负载均衡器分配给M个服务器节点去处理。每个任务的任务长度、每台服务器节点(下面简称“节点”)的处理速度已知,请给出一种任务分配方式,使得所有任务的总处理时间最短。** ```go package main import ( "fmt" "math/rand" "sort" ) const ( // TaskNum 任务数为100 TaskNum = 100 // NodeNum 计算节点数为10 NodeNum = 10 // TaskLengthMin 任务长度最小值10 TaskLengthMin = 10 // TaskLengthMax 任务长度最大值100 TaskLengthMax = 100 // NodeSp...阅读全文

Go-Hashes and Cryptography

关于这一部分,仅给出一个MD5的例子和一个SHA1的例子,分别对应: - Windows平台下面的MD5算法 - 计算SHA1 代码: package main import ( "fmt" "crypto/md5" "crypto/sha1" ) func printBytes(x []byte) { for _, b := range x { fmt.Printf("%02x ", b) } fmt.Println() } /* C:\Go\bin\go.exe run D:\examples\helloworld.go 6c d3 55 6d eb 0d a5 4b ca 06 0b 4c 39 47 98 39 aa f4 c6 1d dc c5 e8 a2 da be de 0f ...阅读全文

博文 2016-09-05 10:00:01 u013344915

[译] part 20: golang 并发介绍

文地址:Part 22: Introduction to Concurrency 原文作者:Naveen R 译者:咔叽咔叽 转载请注明出处。 Go 是一种并发语言,而不是并行语言。在讨论如何在 Go 中处理并发之前,我们必须首先了解什么是并发以及它与并行性的不同之处。 什么是并发 并发是指有处理多个事情的能力,用一个例子来解释。 可以比做一个人慢跑。在他早晨慢跑时,发现鞋带已经松了。然后,这个人停止了跑步,绑鞋带,然后又开始跑步。这是并发的典型示例。这个人能够处理跑步和系鞋带,也就是说,这个人能够处理很多事情,强调一段时间内能做多个事情 :) 什么是并行,它与并发有什么不同 并行性是指同时做了很多事情。它可能听起来类似于并发,但它实际上是不同的。 我们还是用慢跑的例子来理解,我们假设这个人...阅读全文

博文 2019-04-02 00:34:38 咔叽咔叽_7647

算法学习

## 话题分类 | # | Title | 标题 | | # | Title | 标题 | | :-: | - | :-: | - | :-: | - | :-: | | 1 | [Array](https://github.com/openset/leetcode/tree/master/tag/array/README.md) | [数组](https://github.com/openset/leetcode/tree/master/tag/array/README.md) | | 2 | [Dynamic Programming](https://github.com/openset/leetcode/tree/master/tag/dynamic-programming/READM...阅读全文

博文 2019-01-25 18:01:26 openset

加密与解密系列 - 对称加密

文地址 tpkeep.com 本文讨论的对称加密算法主要包括 DES、3DES、AES DES 明文:64 bit 密文:64 bit 密钥:56/64 bit(每 7 位插入一个校验位的时候为 64 bit) 其设计思想充分体现了香农提出的混淆和扩散原则 image.png DES 使用的是 Feistel 结构来加密的,一共需要 16 轮,加密过程如下: 将明文进行初始置换(通过置换表) 将置换后的数据分为左右 L1 R1 各 32 bit 将 48 bit 的子密钥与 R1 作为轮函数F的输入 将 L1 与轮函数的输出异或运算,得到 L1密文 将 L1 密文与 R1 交换位置,分别作为下一轮的 R2,L2 将 2-5 再重复 15 次 将 L17 R17 交换位置,并拼接为 64bit...阅读全文

博文 2019-10-13 20:32:44 aside section ._1OhGeD

三方对接心路历程

从业这几年,因业务的需要,对接过不少三方,有大公司也有小公司,其中感受颇多,这里回顾以及总结一下。 初入职场即与某大型X公司进行业务对接,其实很简单,我只需将公司内部数据提供一个接口给对方调用即可,然而没想到跟我对接的人疑似为对方公司的运营类人员,我按照对方要求完成接口开发,并顺利提供给对方使用,后来对方找到我们说是还需要接口提供其它字段云云,后因公司之间的一些博弈不了了之了,这件事给我的印象是: 对接首先要保证按需要完成,但如果能站在对方角度,提前发现,对接一些问题,想必也会减少不少麻烦。 后与大型跨国S公司进行业务对接,真颠覆了我对大公司的想象:文档给的是有,但是服务器接口不通,接口定义不完整,看起来像是基于某某语言的接口定义,微信、电话、邮件沟通,真是巨慢,骨子里透露着大公司的傲慢,我...阅读全文

博文 2018-11-24 19:34:41 wu_sphinx

Golang并发和并行,内存分配及GC相关

并发(concurreny)和并行(parallellism) 并发是指两个或者两个以上的任务在一段时间内被执行,我们不关心这些任务在某一个时间点是否同时执行,可能同时执行也可能不是,我们只关心在一段时间内,是否执行解决了两个或者两个以上的任务 并行:两个或者两个以上的任务在同一时刻被执行 并发说的是逻辑上的概念,并行强调的物理运行状态,并发包含并行 Go实现了这两种并发形式:第一种是普遍认知的多线程共享内存, 还有一种就是csp并发模型,csp讲究通过通信共享内存 其实无论语言层面怎么实现到了操作系统层面,一定是通过线程的形态存在的,而操作系统根据访问权限的不同,体系架构可以分为用户空间和内核空间,内核空间主要负责访问cpu资源,io,内存等硬件资源,为上层应用提供最基础的基础资源,用户空...阅读全文

博文 2019-05-06 15:46:51 黑手党老k

为何专注于流媒体领域?PPIO 技术揭秘续篇

在各种音视频应用充斥着市场的时候,毫无疑问,流媒体领域将会非常适合区块链技术进行场景落地。在上一篇文章中,我们主要讨论了 PPIO 的 PCDN 架构,接下来将介绍 PPIO 的中 P2SP 的下载逻辑和 IaaS 层的流量计数。 下载逻辑 上图为 PPIO 的 CDN 和 P2SP 的传输架构图。这里将会重点讲解 PPIO 中 P2SP 的下载逻辑,它主要分三个部分,Buffer 管理,下载状态机,和下载算法。接下来会对这三部分一一解释。 Buffer 管理 Buffer 管理,即理解为本地设备管理着资源情况,从而决定需要下载的 Piece 的优先级。Buffer 管理也是和实际应用场景是相关的,对于流媒体来说,存在一个视频播放位置,播放位置附近的内容就是紧急内容,该内容则会被优先下载。 ...阅读全文

加解密学习笔记

加密技术包括两个元素:算法和密钥。 算法是将普通的信息或者可以理解的信息与一串数字(密钥)结合,产生不可理解的密文的步骤。 密钥是用来对数据进行编码和解密的一种算法。 在安全保密中,可通过适当的钥加密技术和管理机制来保证网络的信息通信安全。 大纲介绍 常用的加密解密方法主要有以下加大类: 基本加密方法 对称加密方法 非对称加密方法 下面我们简单介绍一下这几种加密码方法 加密解密技术 我们先来了解一下加密解密的技术。 数据加密和数据解密是一对逆过程。 先来看加密解密的公式: 加密: img 数据加密是用加密算法E和加密密钥K1将明文P转换成密文C 用上面公式表示。 解密: img 数据解密是数据加密的逆过程, 解密算法D和解密密钥K2奖密文C转换成明文P。 通过下图我们可以清晰的看到,数据加密...阅读全文

博文 2019-03-05 18:34:40 赵客缦胡缨v吴钩霜雪明

G8.3 实现不可逆加密 - 用Go语言 Golang实现

前两节介绍的加密方法都属于“可逆”的加密算法,因为加密后的密文经过解密的过程就可以还原出原文。还有一类加密算法属于“不可逆”的加密算法,是指一般无法进行正常解密还原出原文的加密算法。 不可逆加密算法的应用场景也有很多,最典型的是服务端保存用户登录密码的方式。从保护用户隐私角度考虑,服务器端不应该存储用户的登录密码原文,也不应该保存可逆加密后的密文(因为也可以被解密还原),这时候实践中常用的方法是在服务器保存密码时将其用不可逆的算法转换成密文存储,下次用户登录时服务器将发来的用户密码以同样的不可逆算法加密后再与保存的密码密文做比对来判断是否相同。从这个例子也可以看出,不可逆加密算法一般要满足这个要求:同样的明文用同样的方式加密后,得到的密文必须是一样,否则就无法用于比对了。最简单的不可逆加密算...阅读全文

博文 2020-02-27 12:32:44 陆满庭

Golang不到100行实现一套灵活的JWT库

JWT 全 chen JSON Web Tokens 现在被广泛的应用于各种前后端分离的场景,他比传统的 Token Session 方式,更具灵活性。 当然网上也有很多开源的 JWT 库,非常之多,开源组织也提供了官方的库。 可以访问这网址去下载: https://jwt.io 复制代码但是如果我们知其然而不知其所以然的使用,难免会有很多问题。 所以这次分享下,我最近自己写的一个 JWT 库,代码已经上传到 github 上了,地址如下: https://github.com/liu578101804/go-tool/tree/master/jwt 复制代码相比出名的 JWT 库来说,我没有任何优势,只是作为学习使用,欢迎大家指正其中的不足。 下面就给大家说下我的实现思路吧。 JWT 的原...阅读全文

博文 2019-10-17 15:04:26 Golang全栈

Golang之实现(链表)

链表算法 package main import "fmt" type LinkNode struct { data interface{} next *LinkNode } type Link struct { head *LinkNode tail *LinkNode } func (p *Link) InsertHead(data interface{}) { node := &LinkNode{ data: data, next: nil, } if p.tail == nil && p.head == nil { p.tail = node p.head = node return } } func (p *Link) InsertTail(data interface{}) { ...阅读全文

博文 2018-01-15 07:30:01 pyyu

Go-Hashes and Cryptography

关于这一部分,仅给出一个MD5的例子和一个SHA1的例子,分别对应: - Windows平台下面的MD5算法 - 计算SHA1 代码: package main import ( "fmt" "crypto/md5" "crypto/sha1" ) func printBytes(x []byte) { for _, b := range x { fmt.Printf("%02x ", b) } fmt.Println() } /* C:\Go\bin\go.exe run D:\examples\helloworld.go 6c d3 55 6d eb 0d a5 4b ca 06 0b 4c 39 47 98 39 aa f4 c6 1d dc c5 e8 a2 da be de 0f ...阅读全文

博文 2016-09-08 07:00:06 u013344915

2018-08-19 说一说现在的Decentralized Storage的传输

golang是特别不适合拿来做应用层可靠协议开发的语言。所有的可靠协议都依赖于连接状态,在讲究并发的场景下,所有的状态都依赖于事件,所有的事件都依赖于内核文件描述符,问题是,在可靠场景下,我们常常需要将一个端口用作一块网卡,一块网卡可以有65536个描述符并发处理事件,一个端口却只有一个描述符,这一个描述符需要模拟出65536个描述符的事件处理效能,这本来就是令人头大的问题。golang本身的协程机制----固然golang和大多数的协程实现不尽一致----导致每一个事件的处理都应短暂,且事件之间应是无状态的,如果对于可靠协议各阶段的业务与事件理解不到位,极其容易实现出资源有余,而协议效能低下的情况。为什么要有上面一段呢?因为目前的Sia,IPFS,Storj,Swarm都是golang实现...阅读全文

兄弟连区块链教程区块链背后的信息安全2DES、3DES加密算法原理二

## Feistel轮函数 每次Feistel轮函数内部,均经过4种运算,即: * 1、扩展置换:右侧32位做扩展置换,扩展置换将32位输入扩展成为48位输出,使得扩展后输出数据长度与48位子密钥等长。 * 2、异或运算:右侧32位扩展置换为48位后,与48位子密钥做异或运算。 * 3、S盒置换:将异或运算后的48位结果,分成8个6位的块,每块通过S盒置换产生4位的输出,8个块S盒置换后组成32位的输出。 S盒置换的过程为:6位中取第1位和第6位组成行号,剩余第2、3、4、5位组成列号,从S盒置换表中取出相应行、列的十进制数,并转化为4位二进制数,即为S盒输出。 * 4、P盒置换:S盒置换后的32位输出数据,进行P盒置换,仍然输出为32位数据。 go标准库中DES Feistel轮函数代码如...阅读全文

博文 2018-11-09 14:46:20 ITXDL

Golang学习笔记之MD5

1.单向加密 什么是单向加密算法。简而言之就是不可解密的加密方法,也叫作非可逆加密, 用这种方法加密过的东西,地球上现有的人类在有限的时间内是无法解密的,包括加密者自己。 2.常用的单向加密算法有哪些呢? 主要有:BASE64、MD5、SHA、HMAC,其中最为常见的就有MD5,BASE64。这里我们主要介绍最常使用的MD5算法。该算法可以用来得到一个128bit的值,既可以作为K-V中的key,也可以对密码进行加密从而确保其在传输中"不可见"。 3.Golang的加密库都放在crypto目录下,其中MD5库在crypto/md5包中,该包主要提供了New和Sum函数。 函数原型: func Sum(data []byte) [Size]byte 返回数据data的MD5校验和。 初始化一个...阅读全文

博文 2018-12-24 22:34:42 学生黄哲

golang排序算法(sort)简单好用

golang排序,是我们锻炼逻辑必不可少的,不会可以QQ联系 2817228206。相互学习。本人是小白。写的比较简单,推荐用官网的包。package mainimport "fmt"func numsum(arr []int) []int { sum := []int{} ksum := 0 vsum := 0 for _, v := range arr { for ka, va := range arr { if va > v || len(arr) == 1 { ksum = ka vsum = va } } } sum = append(sum, ksum, vsum) return sum}func main() { var arr = []int{} arr = append(a...阅读全文

博文 2020-03-19 01:32:55 bert_7eb4

go并发编程笔记

go语言高级编程笔记 并发编程 一、并发编程的相关概念 1、并发编程概念:使多个任务【程序】可以在同一时间执行以便能够更快的得到结果 2、多元程序:允许操作系统同时运行多个程序,cpu来回切换,缺点:对系统资源进行无限制的抢夺造成程序频繁发生死锁现象 3、串行程序:只能被顺序执行的指令列表 4、并行程序:可以在并行的硬件上执行的并发程序 5、并发程序:被并发的执行的两个或两个以上的串行程序的统称 6、并发系统 7、并发程序的不确定性:没有明确的执行顺序 8、并发程序的内部交互 同步的原则:某个资源同一时刻只能被一个程序占用 同步的作用:避免在并发访问共享资源时可能存在的冲突,以及确保在互相传递数据时能够顺利的接通 二、多进程编程 1、IPC:多进程程序中,程序之间需要互相协作完成任务,而多个...阅读全文

初练算法,比较算法之美

作为一名coder,算法不仅要会懂会写,在保证结果正确的同时,还要求性能足够高,才称得上优秀的算法。 本文比较了本人用 golang 初练算法的一些 demo,以期不断进步,假以时日,写出更好的算法。 1. 求众数(在数组中出现次数大于 n/2 的元素) a. 本人写法: func majorityElement1(nums []int) int { n := len(nums) for i := 0; i < n; i++ { equalNum := 1 for j := 0; j < n; j++ { if nums[i] == nums[j] && i != j { equalNum++ } if equalNum > n/2 { return nums[i] } } } return...阅读全文

博文 2019-04-01 02:34:39 热爱coding的稻草

基于Repository设计缓存方案

相比于使用一个中间件来“暴力”缓存接口的响应,提高接口查询速度而言,Repository缓存能更好的控制缓存粒度和更新时机 —— 鲁迅。 文章同步更新于我的知乎专栏和博客 场景 Tester—A:这个 getInfo 接口咋这么慢呢?查一下要5+s?QPS竟然只有10!!!! RD-B :这是因为getInfo要查库。。。N多库 Tester-B:那优化一下呗? RD-B :好的,容我操作一波(给接口加上一个响应缓存),好了你再测试一下 Tester-B:(测试中。。。),速度果然快了不少。诶不对,这个接口里拿到的用户信息不对,我明明已经balaba了,这里没有更新!!! RD-B :哦哦哦,我晓得咯,再容我操作一波(缓存加有效时间,个人信息更新的时候再强删缓存),O了 至此开始了针对于QP...阅读全文

博文 2019-11-15 13:33:12 yeqown

兄弟连区块链教程区块链背后的信息安全2DES、3DES加密算法原理一

区块链教程区块链背后的信息安全2DES、3DES加密算法原理一,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。 # DES、3DES加密算法原理及其GO语言实现 DES加密算法,为对称加密算法中的一种。70年代初由IBM研发,后1977年被美国国家标准局采纳为数据加密标准,即DES全称的由来:Data Encryption Standard。 对称加密算法,是相对于非对称加密算法而言的。两者区别在于,对称加密在加密和解密时使用同一密钥,而非对称加密在加密和解密时使用不同的密钥,即公钥和私钥。 常见的DES、3DES、AES均为对称加密算法,而RSA、椭圆曲线加...阅读全文

初练算法,比较算法之美

作为一名coder,算法不仅要会懂会写,在保证结果正确的同时,还要求性能足够高,才称得上优秀的算法。 本文比较了本人用 golang 初练算法的一些 demo,以期不断进步,假以时日,写出更好的算法。 1. 求众数(在数组中出现次数大于 n/2 的元素) a. 本人写法: func majorityElement1(nums []int) int { n := len(nums) for i := 0; i < n; i++ { equalNum := 1 for j := 0; j < n; j++ { if nums[i] == nums[j] && i != j { equalNum++ } if equalNum > n/2 { return nums[i] } } } return...阅读全文

博文 2019-04-01 00:34:39 热爱coding的稻草