AesInterface

AES 加密适配器的接口

4.0.0

Joomla CMS

方法

解密

解密字符串。返回原始二进制明文。

decrypt( cipherText,  key) : 

$ciphertext 必须以 IV 后跟密文开头,即使对于 EBC 数据也是如此(由于 EBC 模式中没有 IV 的概念,因此第一个数据块会在 EBC 模式中被丢弃)。

警告:返回的明文在加密期间会被填充到算法的块大小。建议您在解密时将字符串修剪到原始明文的长度。虽然 rtrim($decrypted, "\0") 看起来很有吸引力,但它不是处理二进制数据的正确方法(零字节实际上可能是您明文的一部分,而不仅仅是填充!)。

参数

密文

string要加密的密文

密钥

string原始二进制密钥(如果其大小与块大小不同,则会被填充零或被截断)

响应

string原始未加密的二进制字符串。

加密

加密字符串。返回原始二进制密文。

encrypt( plainText,  key, null|string iv = null) : 

警告:明文会被填充到算法的块大小。建议您存储明文的大小,并在解密时将字符串修剪到该长度。

参数

明文

string要加密的明文

密钥

string原始二进制密钥(如果其大小与块大小不同,则会被填充零或被截断)

IV

null|string初始化向量(用于 CBC 模式算法)

响应

string原始加密的二进制字符串。

获取块大小

返回以字节为单位的加密块大小

getBlockSize() : 

响应

int

是否支持

此适配器是否受支持?

isSupported() : 

响应

bool

设置加密模式

设置 AES 加密模式。

setEncryptionMode( mode = 'cbc',  strength = 128) : 

警告:强度已弃用,因为它在 MCrypt 和 OpenSSL 中具有不同的效果。MCrypt 在 2003 年被放弃,当时 Rijndael-128 算法还没有正式成为高级加密标准 (AES)。MCrypt 还提供了 Rijndael-192 和 Rijndael-256 算法,它们具有不同的块大小。这些算法在 AES 中没有使用。但是,OpenSSL 正确地实现了 AES。它始终使用 128 位(16 字节)块。192 位和 256 位强度是指密钥大小,而不是块大小。因此,在 MCrypt 和 OpenSSL 中使用不同的强度会导致不同且不兼容的密文。

TL;DR:始终使用 $strength = 128!

参数

模式

string在 CBC(推荐)或 ECB 之间选择

强度

int密钥的位强度(128、192 或 256 位)。已弃用。阅读上面的说明。

响应

混合