向/从十六进制字符串加扰/解扰整数值

luke.ph:

我正在尝试实现一些Go代码,以解决以下问题:当提供已知键值作为附加输入参数时,我需要通过将其转换为看似随机的十六进制字符串来充分混淆已知整数值。生成的十六进制字符串的长度必须始终为相同数目的字符(理想情况下,<= 32个字符)。

此外,使用相同的键字符串值,我需要取消混淆十六进制字符串回到原始整数。对于其他上下文,我想满足以下功能签名(但在必要时可以使用其他方法):

func Scramble(key string, value int32) string {
  // TODO: Given a known key and value, generate a sufficiently unpredictable hexadecimal string.
}

func Unscramble(key string, value string) int32 {
  // TODO: Given a known key and value, generate the integer that created the hexadecimal string.
}

func main() {
  key := "Something super secret!"

  scrambled := Scramble(key, 135)
  fmt.Printf("Scrambled: %s\n", scrambled) // Scrambled: a1dec128b590b9ec3281110d6d188c26

  unscrambled := Unscramble(key, scrambled)
  fmt.Printf("Unscrambled: %d\n", unscrambled) // Unscrambled: 135
}

认为 XOR'ing也许是正确的方向,但是我不确定,并且对该主题还不是特别熟悉。

任何见解/方向将不胜感激!请让我知道是否可以提供其他任何上下文/说明。

colm.anseo:

有许多本机或外部程序包可以实现所需的功能,但是如果您想自己实现此功能以获取学习经验,则可以尝试以下方法:

而不是在字符串和int32格式之间来回拖曳数据-将数据保留为原始类型,并使用Stringer方法转换为十六进制-并将helper方法/函数转换为所需的类型。这简化了加扰/解扰逻辑-两者的输入类型相同。

// Code custom type so we can add stringer methods
type Code uint32

// String converts code to hex string format
func (c Code) String() string {
    return fmt.Sprintf("%x", uint32(c))
}

// CodeFromString gets a code from a hex string
func CodeFromString(hexs string) (Code, error) {
    ui, err := strconv.ParseUint(hexs, 16, 32)
    if err != nil {
        return 0, err
    }

    return Code(ui), nil
}

// XOR scrambles/unscrambles
func XOR(key, value Code) Code {
    return key ^ value
}

并使用:

keyHex := "74490a85"
valueHex := "d195c729"

value, _ := CodeFromString(valueHex)
key, _ := CodeFromString(keyHex)

scrambled := XOR(key, value)

unscrambled := XOR(key, scrambled)

游乐场示例:https : //play.golang.org/p/y5pbac_f8Z1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章