Aes
為什麼 OpenSSL 生成的 256 位 AES 密鑰長度為 64 個字元?
這可能是一個菜鳥問題,但我在網上的任何地方都找不到答案:為什麼 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。