Я схожу с ума здесь .. вот пример забавного теста c
https://play.golang.org/p/CZO3rH2EErT
package main
import (
"fmt"
)
func main() {
sha1slice := []byte{165, 75, 200, 121, 106, 64, 196, 203, 143, 25, 88, 22, 63, 8, 234, 244, 174, 211, 98, 152}
sha1Str := string(sha1slice)
sigStr := "�K�yj@�ˏX?����b�"
sigSlice := []byte(sigStr)
fmt.Println("sha1 data:")
fmt.Println(sha1slice)
fmt.Println(sha1Str)
fmt.Println("sig Data:")
fmt.Println(sigStr)
fmt.Println(sigSlice)
}
здесь вывод
sha1 data:
[165 75 200 121 106 64 196 203 143 25 88 22 63 8 234 244 174 211 98 152]
�K�yj@�ˏX?����b�
sig Data:
�K�yj@�ˏX?����b�
[239 191 189 75 239 191 189 121 106 64 239 191 189 203 143 25 88 22 63 8 239 191 189 239 191 189 239 191 189 239 191 189 98 239 191 189]
история в том, что я вычисляю sha1 га sh, который производит массив байтов sha1slice
20 байтов.
оригинальная подпись дается мне как строка во время ввода , теперь я знаю, что sha1 правильный, и он действительно выдает ту же строку, но проверяет байтовый массив исходной сигнатуры, и он не совпадает с байтовым массивом sha1.
Я теряю его .. как получается у одного и того же строкового представления есть разные представления байтового массива в этом коде?
есть ли какой-то отсутствующий параметр кодирования, который установлен в строке? как go справляется с этим?