我正在做一個顫振專案,我們需要用一個也以十六進制給出的密鑰加密一個以十六進制給出的明文。我們正在使用一個名為 encrypt 的包,它只接受純文本作為字串,并且大多數在線 AES 工具也假定明文是字串。所以我們嘗試將十六進制轉換為字串,但無濟于事,我們得到的結果總是超過 16 個位元組。這似乎只是我們特定字串(具有特殊字符)的結果。所以其他字串的密文長度和預期的一樣。
KEY = B0A42687AA50A67A6DCEB68EA59A1332 (16 Bytes)
Plaintext = A0A1A2A3A4A5A6A7B1B2B3B4B5B6B7B0 (16 Bytes)
Expected Ciphertext = D704CE5AAE286511A691AF8EF7D31FE1 (16 Bytes)
到目前為止我們所做的嘗試和結果:
void main() {
final plainText = 'A0A1A2A3A4A5A6A7B1B2B3B4B5B6B7B0' //Original Hex treated as String;
final key = Key.fromBase16('0A42687AA50A67A6DCEB68EA59A1332');
final iv = IV.fromLength(16);
final encrypter = Encrypter(AES(key, mode: AESMode.ebc, padding: null));
final encrypted = encrypter.encrypt(plainText, iv: iv);
final decrypted = encrypter.decrypt(encrypted, iv: iv);
print(encrypted.base16); // 477eobf5f216745a7b1daf703218861b2c26ba77843429adc8928a164CCCC435
}
void main() {
final plainText = ' ?¢£¤¥|§±23′μ?·°' //Hex to equivalent String;
final key = Key.fromBase16('0A42687AA50A67A6DCEB68EA59A1332');
final iv = IV.fromLength(16);
final encrypter = Encrypter(AES(key, mode: AESMode.ebc, padding: null));
final encrypted = encrypter.encrypt(plainText, iv: iv);
final decrypted = encrypter.decrypt(encrypted, iv: iv);
print(encrypted.base16); // 268ceb0611e696ab9eeb4b87d51c60eedfd54a8755c5df5b3f657ee2b93936
}
uj5u.com熱心網友回復:
' ?¢£¤¥|§±23′μ?·°'幾乎可以肯定不等同于十六進制 A0A1A2A3A4A5A6A7B1B2B3B4B5B6B7B0。那將需要將此源代碼解釋為 Latin-1,我無法相信 Flutter 會這樣做。(這也意味著您需要非常小心,以確保第一個字符是“不間斷空格”,而不是普通空格。您在此處發布的文本以普通空格 (0x20) 開頭,而不是 0xa0。
我強烈希望 Flutter 將此字串解釋為 UTF-8,這意味著它是 20c2a1c2a2c2a6c2a7c2b1c2b2c2b3c2b4c2b5c2b6c2b7c2b0(31 位元組)。無法將純文本十六進制轉換為等效的 UTF-8 字串,因為它不是有效的 UTF-8。
您需要查閱包的檔案或源代碼,以了解如何將任意位元組傳遞給加密器。如果它無法處理,您將需要修復或更換它。在不知道您正在使用的特定軟體包、檔案或其源代碼的鏈接的情況下,我認為我們無法為您提供指導。
假設你的意思是這個加密,那么你想要的方法是encryptBytes。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/524354.html
標籤:扑加密AES
