Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

byte replace error #1

Open
skadiD opened this issue Dec 19, 2021 · 12 comments
Open

byte replace error #1

skadiD opened this issue Dec 19, 2021 · 12 comments

Comments

@skadiD
Copy link

skadiD commented Dec 19, 2021

使用[]byte{0x}的时候给了一个16进制数导致替换出错

@ziyouzy
Copy link
Owner

ziyouzy commented Jan 2, 2022

额,能不能说的细致写,这个好久以前写的了😄
你是准备ac.Encode([]byte{0x01,0x02}, "")这样吗?准备给一个16进制整型切片进行加密,16进制整型似乎放在[]uint16里比较好,可能是因为负数范围的问题,这个加密的主要还是针对文字字符串,当时没考虑过针对16进制数
话说回来针对16进制数组进行加密确实是个好功能,网上有这类代码,你看看用不用的上:

func IntToBytes(n int) []byte {
  data := int64(n)
  bytebuf := bytes.NewBuffer([]byte{})
  binary.Write(bytebuf, binary.BigEndian, data)
  return bytebuf.Bytes()
}

按理来说如果直接[]byte{0x01,0x02}行得通的话,无论哪里就都用不到这个转换过程了,改改的话大概是这样吧,我没认真想:

func IntToBytes(ns []uint16) []byte {
  bytebuf := bytes.NewBuffer([]byte{})
  for n := range ns{
    data := int64(n)
    binary.Write(bytebuf, binary.BigEndian, data)
  }
  return bytebuf.Bytes()
}

@skadiD
Copy link
Author

skadiD commented Jan 2, 2022

嗯确实是解决了,我之前也用了别的替换方法
主要还有一个问题是无论是字符串还是hex,加密时随机产生的key有可能不是正确的字符,也会导致解密失败

@ziyouzy
Copy link
Owner

ziyouzy commented Jan 2, 2022

不知道你需要用在哪里,可是一般来说key不是随机的,key是只有你自己知道的一个密钥,和jwt的密钥基本上是一个东西

@skadiD
Copy link
Author

skadiD commented Jan 2, 2022

authcode #L76这里

@ziyouzy
Copy link
Owner

ziyouzy commented Jan 2, 2022

这个你后来解决了吗?比如你自己用js或者java写解密逻辑的话可能会遇到诡异的问题,让这个包自己去解码自己的话我一会试试会不会出问题,主要是纳秒时间戳需要用16位储存,如果用别的语言实现,可是没妥善实现纳秒时间戳的相关逻辑的话也会出些问题

@skadiD
Copy link
Author

skadiD commented Jan 2, 2022

解决了

@ziyouzy
Copy link
Owner

ziyouzy commented Jan 2, 2022

怎么解决的🤣

@skadiD
Copy link
Author

skadiD commented Jan 2, 2022

一个非常蠢的实现
keyDynamic = str2bytes(fmt.Sprintf("%x", keyDynamic))

@ziyouzy
Copy link
Owner

ziyouzy commented Jan 2, 2022

不蠢啊,够用就行,我也是当初为了提高那么点性能,整我现在也看不懂当初为啥那么写了😂

@ziyouzy
Copy link
Owner

ziyouzy commented Jan 2, 2022

似乎区别是类似补位的问题,keyDynamic貌似是16位md5的一部分,keyDynamic的位数是可以自由设定的,没有硬性规定是16位,你这种写法应该是强制16位了,比如说某个md5是abcdefg可是这种状态用于计算会出错,补全16位以后就变成了abcdefg000000000。
我在喝酒和🤣,新年快乐,你是第一个提issue的人,感谢支持

@ziyouzy
Copy link
Owner

ziyouzy commented Jan 2, 2022

也可能是我溢出了上边的var keyDynamic =make([]byte,8)应该是var keyDynamic =make([]byte,16),我再想想

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants
@ziyouzy @skadiD and others