Closed TheNorthMemory closed 4 years ago
codec的说法可能不妥,通常用在base64/hex之类的场景。敏感信息加密准确的说应该是密码学,建议用crypto
有必要我再捋一下此类的设计目标吧:
之所以把 encrypt
和 decrypt
方法私有化,是和用法有关;若public化,实例在驱动加/解密时,现有处理方式,在实例内message
会被干扰到,不改实现的话,出参就只能是字符串了,这就不好玩了;进而如果trace
的话,反倒是麻烦了(至少是要甄别源json
敏感信息是不是本来就是加了密的还是被此 crypto
弄过);
实例的方法,当静态方法用,其实和把实例直接当方法用(__invoke
)没多大区别;
此类的 __invoke
中的 (){}()
语法糖,充分利用了语言特性,把纵向声明拉平成横向pipeline,抽象了 encrypt
和 decrypt
中的共有处理逻辑,让那俩方法中的处理变得单一清晰,进而可以让这俩方法私有掉,归一化入口入参;
封装的关键点其实在 implements \JsonSerializable
,这个基类只有1个抽象方法,用途也很单一,即用在 json_encode
场景,这就为此 中间件 应用的业务单元,全程保持住了 面向对象(且这个对象内留有 证书 句柄及 OAEP_PADDING 声明),这些显性要素信息其实远远优于字符串,有助于过程调试;
新增「加解密」功能, 测试校准@ PHP 7.3.11 with LibreSSL 2.8.3
/v3/smartguide/guides
/v3/merchant-service/complaints
备注:
OPENSSL_PKCS1_OAEP_PADDING
自PHP7引入,此lib未在PHP5
系列测试,使用时请注意PHP版本。