Работя върху игра, която ще комуникира с NodeJS сървър за различни цели и в момента се опитвам да внедря някакво AES криптиране на полезния товар на заявката. Всичко работеше добре, докато тествах между сървъра и инструмент за тестване, направен в JS, но когато се опитах да пренеса клиентския код на друг език, който няма внедряване на Web Crypto / Subtle Crypto, започнах да получавам грешки за AES ключа дължина.
Разглеждайки го, открих, че AES ключът, който се генерира (чрез window.crypto.subtle.generateKey
), е дълъг 176 бита, въпреки че посочих дължина на AES ключ от 128. Експортирам ключа във формат JWK и странното е, че алгоритъмът е посочен като A128CBC, което предполага, че трябва да бъде 128 бита.
Тъй като така или иначе ще генерирам нов ключ, нямам никакви притеснения да публикувам въпросния експортиран JWK тук:
{
"alg": "A128CBC",
"ext": true,
"k": "J3SQ0IjwlJnJwu0EadenLg",
"key_ops": [
"encrypt",
"decrypt"
],
"kty": "oct"
}
Може ли някой да обясни откъде идват тези допълнителни 6 байта? Внедряването на AES от страна на пренесения клиент изисква 128-битови ключове и просто хвърля грешки, ако не е 128, спирайки целия проект, докато това не бъде разрешено.