Я работаю над игрой, которая будет взаимодействовать с сервером 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, что приводит к остановке всего проекта до тех пор, пока это не будет решено.