Я пытаюсь перенести существующий метод шифрования и дешифрования из старого приложения TypeScript в новое приложение Python. В этом методе используется шифрование AES-256-GCM, однако разработчик, написавший его, похоже, не использовал тег аутентификации, который, по-видимому, является требованием стандарта шифрования, но не пакета TypeScript Crypto.
Вот устаревший код:
import type { BinaryLike } from "crypto"
import {
type CipherGCMTypes,
createCipheriv,
createDecipheriv,
randomBytes,
} from "crypto"
let secret = "abcdefghijklm"
// auto pad
if (secret.length < 32) secret += "\0".repeat(32 - secret.length)
// 256-bit/32-byte AES GCM encryption
const algorithm: CipherGCMTypes = "aes-256-gcm"
export interface EncryptionResult {
iv: TByteType
value: TByteType
}
export function encrypt(text: BinaryLike): EncryptionResult {
const iv = randomBytes(16)
const cipher = createCipheriv(algorithm, secret, iv)
const enc = cipher.update(text)
return {
value: enc,
iv,
}
}
const b64ToBuf = (b64: string) => Buffer.from(b64, "base64url")
const bufToB64 = (buf: Buffer) => buf.toString("base64url")
export function encryptBase64Res(text: BinaryLike): EncryptionResult {
const res = encrypt(text)
return {
value: bufToB64(res.value),
iv: bufToB64(res.iv),
}
}
const divider = "::"
export function encryptBase64(text: BinaryLike): string {
const res = encryptBase64Res(text)
return `${res.value}${divider}${res.iv}`
}
export function decryptBase64(b64: string): Buffer {
const [value, iv] = b64.split(divider)
return decryptBase64Res({
value,
iv,
})
}
export function decryptBase64Res(res: EncryptionResult): Buffer {
return decrypt({
value: b64ToBuf(res.value),
iv: b64ToBuf(res.iv),
})
}
export function decrypt({ iv, value }: EncryptionResult): Buffer {
const decipher = createDecipheriv(algorithm, secret, iv)
return decipher.update(value)
}
Любая попытка миграции до сих пор приводила к отсутствию ошибок тега аутентификации с использованием пакета шифрования на Python. Можно ли из этой структуры выработать тег? Должен быть тег, который устанавливается при первоначальном шифровании и считывается при расшифровке в методах createCipheriv и createDecipheriv.
Я пытаюсь перенести существующий метод шифрования и дешифрования из старого приложения TypeScript в новое приложение Python. В этом методе используется шифрование AES-256-GCM, однако разработчик, написавший его, похоже, не использовал тег аутентификации, который, по-видимому, является требованием стандарта шифрования, но не пакета TypeScript Crypto. Вот устаревший код: [code]import type { BinaryLike } from "crypto" import { type CipherGCMTypes, createCipheriv, createDecipheriv, randomBytes, } from "crypto"
let secret = "abcdefghijklm" // auto pad if (secret.length < 32) secret += "\0".repeat(32 - secret.length)
return decryptBase64Res({ value, iv, }) } export function decryptBase64Res(res: EncryptionResult): Buffer { return decrypt({ value: b64ToBuf(res.value), iv: b64ToBuf(res.iv), }) } export function decrypt({ iv, value }: EncryptionResult): Buffer { const decipher = createDecipheriv(algorithm, secret, iv) return decipher.update(value) } [/code] Любая попытка миграции до сих пор приводила к отсутствию ошибок тега аутентификации с использованием пакета шифрования на Python. Можно ли из этой структуры выработать тег? Должен быть тег, который устанавливается при первоначальном шифровании и считывается при расшифровке в методах createCipheriv и createDecipheriv.