登录
首页 >  Golang >  Go问答

golang rc4 结果不正确...

来源:SegmentFault

时间:2023-01-07 17:55:23 168浏览 收藏

本篇文章给大家分享《golang rc4 结果不正确...》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

golang rc4 结果不正确.

package main import ( "crypto/rc4" "fmt" ) func main() { rc, err := rc4.NewCipher([]byte("5813aecc-0d05-497e-aafa-3111610cf44c")) if err != nil { panic(err) } src := []byte("hello world") fmt.Println(src) rc.XORKeyStream(src, src) fmt.Println(src) rc.XORKeyStream(src, src) fmt.Println(src) }

输出:

[104 101 108 108 111 32 119 111 114 108 100] [216 36 143 56 20 50 169 207 31 252 154] [0 32 70 107 105 65 236 28 246 248 21]

正确答案

看了下NewCipher

// NewCipher creates and returns a new Cipher. The key argument should be the // RC4 key, at least 1 byte and at most 256 bytes. func NewCipher(key []byte) (*Cipher, error) { k := len(key) if k 256 { return nil, KeySizeError(k) } var c Cipher for i := 0; i

XORKeyStream

// XORKeyStream sets dst to the result of XORing src with the key stream. // Dst and src may be the same slice but otherwise should not overlap. func (c *Cipher) XORKeyStream(dst, src []byte) { for i := range src { c.i += 1 c.j += c.s[c.i] c.s[c.i], c.s[c.j] = c.s[c.j], c.s[c.i] dst[i] = src[i] ^ c.s[c.s[c.i]+c.s[c.j]] } }

这里并不是简单的异或运算,所以执行两次以后不会有xor运算的性质

今天关于《golang rc4 结果不正确...》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于golang的内容请关注golang学习网公众号!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>