之所以把这个接口文件单独拿出来讲,主要是为了阐明三件事情:

  1. PHP7 可以在接口文件中定义公共类常量;
  2. 阐述高等级加密AES的两个基础知识点;
  3. 抽象公共加/解密函数接口,引述程序设计中的协变设计规则;

AES 加解密的块大小,固定是16字节的,遂定义了 Crypto\AesInterface::BLOCK_SIZE 这个常量;GCM模式的认证标签auth_tag,在OpenSSL中的可能值是16, 15, 14, 13, 12, 8 or 4的其中一个,官方文档在阐述敏感信息加解密的时候,定义了AUTH_TAG_LENGTH_BYTE常量,严格意义上来说,这个值应该是个数组,只是在实现过程中,取了最大值,即等于AES的块大小,这个在程序代码中标记成即将废弃功能(因为不准确),预计在下一个大版本上会移除。

接口上同时定义了两个加密算法常量 ALGO_AES_256_GCMALGO_AES_256_ECB,从字面量上给类实现提供了可以直接使用的公共加/解密算法。

接口同时定义了抽象公共方法 加密:encrypt(string $plaintext, string $key, string $iv = ''): string; 及解密: decrypt(string $ciphertext, string $key, string $iv = ''): string; 的参数名称/顺序及类型,返回值类型,给类实现圈定基础参数。

这个接口类就没啥说的类,下一讲,我们来说说APIv3的敏感信息加解密AES-GCM实现。