Zakodowanie []byte do jaknajkrótszego ciągu

Zakodowanie []byte do jaknajkrótszego ciągu

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

BO
  • Rejestracja: dni
  • Ostatnio: dni
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?

Kopiuj
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
}
SO
  • Rejestracja: dni
  • Ostatnio: dni
2

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

hauleth
  • Rejestracja: dni
  • Ostatnio: dni
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.

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
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ć).

KamilAdam
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Silesia/Marki
  • Postów: 5550
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ć

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.