1、HMAC-SHA256 加密(不可逆无法解密)
假设:
appkey 为:testappkey
appsecret 为:testappsecret
当前时间戳为:1562912285
拼装原串为:testappkey1562912285testappsecret
则 HMAC-SHA256 加密后得到的值:559c4fa92e47b7f148a788300c6a345feddbd327b9fc551f100de679bbb247c5
2、AES(CipherMode.CBC PaddingMode.PKCS7)加密
假设:
appsecret 为:0688f7a191da4fbab177fd1c8ef19901
aesIV 为:ff465fdecc764337
加密前数据示例:{"settlement_code":["JS19BUB14F5D8D4C"],"random_code":["19BUB14F5D8D4C","19BUAD0E89D780"]}
则 加密后的值为(以下三个方法都一样):{"data":"236agZcupcSsMZghtlmzhb7lEWzGZc3FO5GWQyrSB5kP/y1ESvd+CuBgQiWU/fwAICY/s0mideku/rXSKEb8In41F4SkUVLyLzYoYGed4QTjsqohTM0T6wmbkOiT1TH3"}
若不知道使openssl_encrypt的第二个参数传什么方法,则可以使用以下方法再for循环逐个尝试
3、AES(CipherMode.CBC PaddingMode.PKCS7)解密
得到的data即为加密前数据:{"settlement_code":["JS19BUB14F5D8D4C"],"random_code":["19BUB14F5D8D4C","19BUAD0E89D780"]}
4、舌诊的aes加密示例
5、舌诊的aes解密示例
6、rsa签名(使用私钥生成签名)
7、rsa签名验签(使用公钥验签)
8、JWT加密&签名验证(简单的PHP示例),详情可参考JWT官网:https://jwt.io
与jwt官网中的base64UrlEncode中对应的php的实现方法为
与jwt官网中的base64UrlEncode中对应的php的实现方法为
$header,$payload,$secret 3个参数分别如下
jwt加密后的值为
打印后对比官网的值,一致
注意:若官网中勾选“secret base64 encoded”选项,表示官网中secret的值要填base64加密后的值(最好用base64UrlEncode方法加密的而不是用php的base64_encode加密的,即这里的private static function base64UrlEncode方法),即例如此php例子中$secret = '123456',则官网中若勾选“secret base64 encoded”后填入的值为'MTIzNDU2',加密的结果一致
另:jwt的其他加密方法入HS384等,均与此类似
9、js、c#与php公用的aes加密解密方式,详情可参考https://www.cnblogs.com/zjbky/p/6065829.html
先设置好key,iv,以及待加密的字符串str
因为使用OPENSSL_NO_PADDING方式,所以待加密的字符串为16个字,不够的话要填充零
加密的结果为
解密时,需要注意去除填充的零(貌似不去除也没问题)