Java byte
подписано, но байты в массивах, используемых в криптографии Java, - не только AAD, но также и открытый текст, зашифрованный текст, хэши / MAC / подписи, ключи, сертификаты и т. Д. И т. Д., А также уровень ОС I/ O, как File{Input,Output}Stream
- берется по модулю 256, фактически делая их без знака - и значения, которые вы в них помещаете, должны быть в диапазоне 0..255 , преобразованные в byte
.
Обратите внимание, что операция дешифрования Java для шифра AEAD не дает аутентификации;вместо этого вы даете ему код проверки подлинности ciphertext PLUS, и он выполняет сравнение, выдавая исключение в случае несоответствия.
Также обратите внимание, что единственным режимом AEAD, поддерживаемым «нормальной» Java (с поставщиками Sun-now-Oracle и OpenJDK), является GCM (с AES).BouncyCastle также поддерживает CCM, и я не знаю о IBM или других, таких как Android.Ваша ссылка на nodejs-crypto говорит, что она поддерживает только GCM, что удивляет меня, поскольку она использует OpenSSL снизу и поддерживает как GCM, так и CCM начиная с OpenSSL 1.0.1.
Предполагая, что вы используете режим, поддерживаемый с обеих сторон, эти режимы стандартизированы и детерминированы, поэтому, если вы используете тот же ключ, nonce, открытый текст или зашифрованный текст, как применимо, и AAD yes, они будут производить / ожидатьтот же тег и взаимодействовать.