Я хочу сделать AESMode with ECB Encryption and Decryption
на Голанге.
Ключ: 2A07EEF4384E7CD9671E1ED5BCF60029
Зашифрованный образец сообщения base64 Закодировано: g08cALdBhD8Q21d4pfjBKg==
Я не могу расшифровать сообщение. Может ли кто-нибудь помочь мне, как я могу сделать AESMODE.ECB enc / dec в Golang.
В настоящее время я использую github.com/andreburgaud/crypt2go/ecb библиотека
Зашифровать код
func EncryptASEWithECB(pt, key []byte) string {
block, err := aes.NewCipher(key)
if err != nil {
panic(err.Error())
}
mode := ecb.NewECBEncrypter(block)
ct := make([]byte, len(pt))
mode.CryptBlocks(ct, pt)
return base64.StdEncoding.EncodeToString(ct)
}
Расшифровать код
func DecryptASEWithECB(ct, key []byte) string {
block, err := aes.NewCipher(key)
if err != nil {
panic(err.Error())
}
mode := ecb.NewECBDecrypter(block)
pt := make([]byte, len(ct))
mode.CryptBlocks(pt, ct)
return string(pt)
}
Я получаю правильный результат, когда пробовал с этим Прецедент
func TestEncryptWithECB(b *testing.T) {
key := []byte("2A07EEF4384E7CD9671E1ED5BCF60029")
plaintext := []byte("exampleplaintext")
encrypted := utils.EncryptASEWithECB(plaintext,key)
fmt.Printf("encrypted : %s\n", encrypted)
//plaintext = []byte(encrypted)
sDec,err:= base64.StdEncoding.DecodeString(encrypted)
fmt.Println(string(sDec),err)
decrypted := utils.DecryptASEWithECB(sDec, key)
fmt.Printf("decrypted : %s\n", decrypted)
}
Проблема Проблема в том, что мне нужно использовать AESMODE.ECB для получения значения из ниже зашифрованного сообщения Этот ключ и сообщение поступают от третьей стороны, и они сказали, что мы должны использовать AESMODE.ECB без заполнения для расшифровки этого сообщения.
Key: `2A07EEF4384E7CD9671E1ED5BCF60029`
Encrypted Sample Msg base64 Encoded: `g08cALdBhD8Q21d4pfjBKg==`
Но я не могу этого сделать. Кто-нибудь поможет, как я могу это сделать?
РешениеФункция тестирования обновлена
key, err := hex.DecodeString("2A07EEF4384E7CD9671E1ED5BCF60029")
func TestEncWithECB(b *testing.T) {
//key :=
//plaintext = []byte(encrypted)
key,_ := hex.DecodeString("2A07EEF4384E7CD9671E1ED5BCF60029") //encode key in bytes to string and keep as secret, put in a vault
fmt.Printf("key to encrypt/decrypt : %s\n", key)
sDec,err:= base64.StdEncoding.DecodeString("g08cALdBhD8Q21d4pfjBKg= = ")
fmt.Println(string(sDec),err)
decrypted := utils.DecryptASEWithECB(sDec, key)
fmt.Printf("decrypted : %s\n", decrypted)
}
Ключ должен быть декодирован шестнадцатеричный: key, err := hex.DecodeString("2A07EEF4384E7CD9671E1ED5BCF60029")
. Расшифровка - тестирование идет.
Да, это сработало, спасибо MichaelFehr и Topaco. Большое спасибо. Я обновлю пост и опубликую решение с этим.
Я ничего не тестировал, но, возможно, ключ является представлением ключа шестнадцатеричная строка, поэтому вы можете проверить с помощью «преобразователя шестнадцатеричной строки в байтовый массив» и использовать результат в качестве входных данных для вашей функции дешифрования :-)