2022-02-14 10:54:25 +07:00
|
|
|
import * as crypto from "crypto"
|
|
|
|
import {
|
|
|
|
DEFAULT_AES_ALGORITHM,
|
|
|
|
DEFAULT_BUFFER_TYPE,
|
|
|
|
DEFAULT_ENCODING_TYPE,
|
2022-02-14 12:30:32 +07:00
|
|
|
} from "../../config"
|
|
|
|
import { bufferToString, stringToBuffer } from "../../util"
|
2022-02-14 10:54:25 +07:00
|
|
|
|
|
|
|
const encrypt = (
|
2022-02-14 12:30:32 +07:00
|
|
|
data: string | Buffer,
|
2022-02-14 10:54:25 +07:00
|
|
|
key: string | Buffer,
|
|
|
|
iv?: string | Buffer | null
|
|
|
|
): string => {
|
|
|
|
const cipher = crypto.createCipheriv(
|
|
|
|
DEFAULT_AES_ALGORITHM,
|
|
|
|
stringToBuffer(key),
|
|
|
|
stringToBuffer(iv || key)
|
|
|
|
)
|
2022-02-14 12:30:32 +07:00
|
|
|
const _data = bufferToString(data)
|
2022-02-14 10:54:25 +07:00
|
|
|
let encrypted = cipher.update(
|
2022-02-14 12:30:32 +07:00
|
|
|
_data,
|
2022-02-14 10:54:25 +07:00
|
|
|
DEFAULT_ENCODING_TYPE,
|
|
|
|
DEFAULT_BUFFER_TYPE
|
|
|
|
)
|
|
|
|
encrypted += cipher.final(DEFAULT_BUFFER_TYPE)
|
|
|
|
return encrypted
|
|
|
|
}
|
|
|
|
|
2022-02-14 12:30:32 +07:00
|
|
|
const decrypt = (
|
|
|
|
data: string | Buffer,
|
|
|
|
key: string | Buffer,
|
|
|
|
iv?: string | Buffer | null
|
|
|
|
): string => {
|
2022-02-14 10:54:25 +07:00
|
|
|
const decipher = crypto.createDecipheriv(
|
|
|
|
DEFAULT_AES_ALGORITHM,
|
|
|
|
stringToBuffer(key),
|
|
|
|
stringToBuffer(iv || key)
|
|
|
|
)
|
2022-02-14 12:30:32 +07:00
|
|
|
const _data = bufferToString(data)
|
2022-02-14 10:54:25 +07:00
|
|
|
let decrypted = decipher.update(
|
2022-02-14 12:30:32 +07:00
|
|
|
_data,
|
2022-02-14 10:54:25 +07:00
|
|
|
DEFAULT_BUFFER_TYPE,
|
|
|
|
DEFAULT_ENCODING_TYPE
|
|
|
|
)
|
|
|
|
decrypted += decipher.final(DEFAULT_ENCODING_TYPE)
|
|
|
|
return decrypted
|
|
|
|
}
|
|
|
|
|
2022-02-14 16:52:39 +07:00
|
|
|
const cryptoRandomBytes = (length: number): Buffer => {
|
|
|
|
return Buffer.from(crypto.randomBytes(length))
|
|
|
|
}
|
|
|
|
|
|
|
|
const cryptoRandomString = (length: number): string => {
|
|
|
|
return cryptoRandomBytes(length).toString(DEFAULT_BUFFER_TYPE)
|
|
|
|
}
|
|
|
|
|
|
|
|
export { encrypt, decrypt, cryptoRandomBytes, cryptoRandomString }
|