Aes

為什麼 OpenSSL 生成的 256 位 AES 密鑰長度為 64 個字元?

  • May 28, 2021

這可能是一個菜鳥問題,但我在網上的任何地方都找不到答案:為什麼 OpenSSL 生成的 256 位 AES 密鑰有 64 個字元?我用來生成密鑰的命令是:

$ openssl enc -aes-256-cbc -k secret -P -md sha1
salt=E2EE3D7072F8AAF4
key=C94A324B7221AA8A8760DA0717C80256EF4308EC6068B7144AA3BBA4A5F98007
iv =5C7CB13DBDA69B2C091E0D5E95943627

我以為我可以讀取密鑰字元串並對其進行 base64 解碼以獲得 256 位 AES 密鑰,但這不起作用,因為解碼後 64 個字元變成了 384 位字節數組。

/* read keyString from config... */
byte[] secretKey = Base64.getDecoder().decode(keyString);
Preconditions.checkArgument(secretKey.length == 32,
           "Length of secretKey is %s-bit instead of 256-bit: %s",secretKey.length * 8, config.getSecretKey());
SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey, "AES");

如果我的數學運算正確,則在 base64 編碼後,256 位密鑰的長度應為 41 個字元。我在這裡遺漏了一些明顯的東西嗎?

密鑰是十六進制的。所以每兩個字元組成一個十六進製字節,這將長度降低到 32 個實際字節。每個字節有 8 位,因此 8*32 = 256。

引用自:https://crypto.stackexchange.com/questions/39522