MySQL加密/解密/加锁/解锁函数(password、md5、encode、get_lock、is_free_lock、is_used_lock等)

 一、密码加密函数

  • password(str);  //从原明文密码str计算并返回加密后的密码字符串
  • str为NULL,返回NULL
  • password在MySQL服务器鉴定系统中使用。不应该用在个人的应用程序中
  • 加密是单向的(不可逆),加密后的密码保存到用户权限表中
  • 执行密码加密与UNIX中密码加密方式不同

二、加密函数

  • md5(str);
  • 参数为字符串,该函数为字符串算出一个MD5 128比特校验和
  • 返回值以32位16进制数字的二进制字符串形式返回
  • str为NULL,返回NULL

三、加密-解密函数

  • encode(str,pswd_str);  //使用pswd_str为密码,加密str。返回值为二进制字符串。使用decode解密
  • decode(加密的字符串,pswd_str);  //使用pswd_str为密码,解密加密过的字符串。返回值字符串

使用

  • 加密:encode(被加密的密码,密码);
  • 解密:decode(encode(被加密的密码,密码),密码);   //也可以用上面返回的二进制字符串

四、加锁/解锁函数

  • get_lock(str,timeout);  //得到一个锁,锁名为str,持续时间为timeout。可以使用release_lock()或连接断开(正常非正常)解锁
  • 若加锁成功:返回1
  • 操作超时未:返回0
  • 发生错误:返回去NULL
  • release_lock(str);  //解开被get_lock加锁的锁
  • 若锁被解开:返回1
  • 若该线程尚未被创建锁:返回0(此时锁还没有解开)
  • 若命名的锁不存在:返回NULL
  • 若该锁从未被get_lock()的调用获取,或锁已经被提前解开:则该锁不存在
  • is_free_lock(str);  //检查名为str的锁是否可以使用(没有被封锁)
  • 若该锁可以使用(没有人在用这个锁):返回1
  • 若锁正在被使用:返回0
  • 出现错误:返回NULL
  • is_used_lock(str);  //检查锁名为str的锁是否正在被使用(被封锁)
  • 被封锁:返回使用该锁用户的客户端的连接标识符(connection ID)
  • 否则:返回NULL

好的,关于您的问题,我可以为您提供以下答案: 在PHP 7.2及以上版本中,可以通过openssl扩展实现AES加密。具体实现方式如下: 1. AES加密 ```php function aesEncrypt($data, $key, $iv) { $encrypted = openssl_encrypt($data, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv); return base64_encode($encrypted); } ``` 其中,$data为待加密的数据,$key为加密密钥,$iv为初始化向量,函数返回值为加密后的数据(base64编码)。 2. AES解密 ```php function aesDecrypt($data, $key, $iv) { $encrypted = base64_decode($data); $decrypted = openssl_decrypt($encrypted, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv); return $decrypted; } ``` 其中,$data为待解密的数据(base64编码),$key为解密密钥,$iv为初始化向量,函数返回值为解密后的数据。 通过以上函数实现的AES加密可以与JS进行互通,具体实现方式可以参考以下示例: 1. JS加密 ```javascript function aesEncrypt(data, key, iv) { var cipher = crypto.createCipheriv('aes-128-cbc', key, iv); var encrypted = cipher.update(data, 'utf8', 'base64'); encrypted += cipher.final('base64'); return encrypted; } ``` 其中,data为待加密的字符串,key为加密密钥,iv为初始化向量,函数返回值为加密后的数据(base64编码)。 2. JS解密 ```javascript function aesDecrypt(data, key, iv) { var decipher = crypto.createDecipheriv('aes-128-cbc', key, iv); var decrypted = decipher.update(data, 'base64', 'utf8'); decrypted += decipher.final('utf8'); return decrypted; } ``` 其中,data为待解密的数据(base64编码),key为解密密钥,iv为初始化向量,函数返回值为解密后的数据。 注意事项: 1. 在PHP中,$key和$iv必须为16位长度的字符串,可以通过以下方式生成: ```php $key = openssl_random_pseudo_bytes(16); $iv = openssl_random_pseudo_bytes(16); ``` 2. 在JS中,key和iv必须为Buffer类型,可以通过以下方式生成: ```javascript var key = crypto.randomBytes(16); var iv = crypto.randomBytes(16); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

董哥的黑板报

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值