Wątek przeniesiony 2023-11-14 15:38 z Inne języki programowania przez Riddle.

Zakodowanie []byte do jaknajkrótszego ciągu

0

Jest jakiś sposób w golangu aby zaenkodować []byte do stringa, ale aby ten string był jak najkrótszy i abym mógł potem oczywiście odenkodować. Robię jak poniżej ale to przy dłuższej []byte zwraca mi kosmiczny string.

Chciałbym aby zwróciło string do max 50 znaków, da się w ogóle?

func encrypt(data, key []byte) (string, error) {
	block, err := aes.NewCipher(key)
	if err != nil {
		return "", err
	}

	aead, err := cipher.NewGCM(block)
	if err != nil {
		return "", err
	}

	nonce := make([]byte, aead.NonceSize())
	if _, err = io.ReadFull(rand.Reader, nonce); err != nil {
		return "", err
	}

	byte := aead.Seal(nonce, nonce, data, nil)

	return base64.URLEncoding.EncodeToString(byte), nil
}
2

Raczej ciężko będzie upchać tablicę bajtów o dowolnej długości do stringa o max 50 znakach ;)

0

Z zasady szufladkowej wynika, że się tego nie da zrobić w taki sposób by dało się uzyskać oryginalny ciąg znaków.

1
boleq napisał(a):

i abym mógł potem oczywiście odenkodować.

"Od-enkodować"? Czyli zdekodować, jak rozumiem?

Słowa "encode"/"decode" po polsku znaczą "zakodować"/"odkodować" (lub zdekodować).

1
boleq napisał(a):

Robię jak poniżej ale to przy dłuższej []byte zwraca mi kosmiczny string.

Ale co rozumiesz przez kosmiczne? Base64 ma narzut 33%. Za pomocą 4 znaków kodujesz 3 bajty (ośmiobitowe warto dodać pamiętając tu ostatnie dyskusje co to jest bajt :D )

BTW może powiedż co chcesz osiągnąć? to będzie łątwiej coś doradzić

1 użytkowników online, w tym zalogowanych: 0, gości: 1