PHP实现DES加密

开发中碰到的需求,网上介绍的很乱,难得找到一个,但是直接使用会报错,下面是经过自己加工后的Des加密算法类,可以加密,解密,同时支持偏移量参数。
<?php


class Des {

private $key;
private $iv; //偏移量

public function __construct($key, $iv = 0) {
$this->key = $key;
$this->iv = $iv == 0 ? $key : $iv;
}

//加密
public function encrypt($str) {
$size = mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC);
$str = $this->pkcs5Pad($str, $size);
@$data = mcrypt_cbc(MCRYPT_DES, $this->key, $str, MCRYPT_ENCRYPT, $this->iv);
//$data=strtoupper(bin2hex($data)); //返回大写十六进制字符串
return base64_encode($data);
}

//解密
public function decrypt($str) {
$str = base64_decode($str);
$str = mcrypt_cbc(MCRYPT_DES, $this->key, $str, MCRYPT_DECRYPT, $this->iv);
$str = $this->pkcs5Unpad($str);
return $str;
}

public function hex2bin($hexData) {
$binData = "";
for ($i = 0; $i < strlen($hexData); $i += 2) {
$binData .= chr(hexdec(substr($hexData, $i, 2)));
}
return $binData;
}

public function pkcs5Pad($text, $blocksize) {
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}

public function pkcs5Unpad($text) {
$pad = ord($text {strlen($text) - 1});
if ($pad > strlen($text))
return false;
if (strspn($text, chr($pad), strlen($text) - $pad) != $pad)
return false;
return substr($text, 0, - 1 * $pad);
}

}

使用示例
<?php
$key = '12345678';
$iv = 0;//偏移量
$des = new Des($key,$iv);
//加密
$str = 'abcd';//待加密串
$result1 = $des->encrypt($str);
var_dump($result1 );
//解密
$result2 = $des->decrypt($result1 );
var_dump($result2);

示例加密的结果为UUNQKpO/V5PRlS6zxbN2MQ==,有一点需要说明一下,加密使用的key必须要求是8位的字符串,否则是加密不了的。
#php# #des# #加密算法#

评论0

  • 没有任何评论
评论请先登录

最近热帖

  1. 基于 Harbor 搭建 Docker 私有镜像仓库 789043
  2. PPS代理节点池 287309
  3. PPS代理节点池② 196640
  4. PPS代理节点池③ 166487
  5. 订阅池记录 143472
  6. V2ray免费账号 12602
  7. WEB代理地址 4009
  8. 全栈开发笔记 3573
  9. GITHUB项目 2835
  10. 百度的无刷新搜索之PJAX 2535

近期热议

  1. GITHUB项目 55
  2. PPS代理节点池 50
  3. WEB代理地址 43
  4. 全栈开发笔记 42
  5. ROBOT机器人之路 31
  6. PPS代理节点池③ 26
  7. PPS代理节点池② 20
  8. C++回归之路 19
  9. OCR识别探索 16
  10. 错误笔记本 14