开发中碰到的需求,网上介绍的很乱,难得找到一个,但是直接使用会报错,下面是经过自己加工后的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);

}

}使用示例

$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位的字符串,否则是加密不了的。

des加密 php7.1,php实现des加密相关推荐

  1. 常见加密工具类Base64、DES、AES、RSA、MD5汇总

    文章目录 引言 1.Base64加密 2.DES加密 3.AES加密 4.RSA加密 5.MD5加密 引言 项目中经常会用到Base64.DES.AES.RSA.MD5几种加解密方式,每次都要去网上搜 ...

  2. C# DES加密类,16位的加密。

    这个加密类是与java写的DES加密不同时,自己写的,最后与Java的加密相同了,解决了加密后不同的问题. 可以直接调用里面的加密和解密的方法. using System; using System. ...

  3. Java加密与解密的艺术~DES实现

    密钥长度与安全性成正比,但Java仅支持56位密钥长度,作为补充,Bouncy Castle 提供64位密钥长度支持.在此基础上配合不同填充方式(如PKCS5Padding,PKCS7Padding) ...

  4. [转]DES加密 java与.net可以相互加密解密两种方法

    [转]原文地址:http://jumpman.javaeye.com/blog/605996 DES加密 java与.net可以相互加密解密两种方法 文章分类:Java编程 通过这个方法可以实现jav ...

  5. Delphi调用C#的加密解密(Base64/AES/DES/MD5可扩充)

    1. 背景: 近期,由于工作上与第三方公司传输数据的时候需要采取数据加密,但是我们采用的时较低版本的Delphi 6:由于加密算法等差异,导致在传输的加密数据第三方一致解析不了(具体问题表现为base ...

  6. java des ecb_【转】 java DES ECB模式对称加密解密

    最近需要又要使用DES加密数据,要求DES加密出来的数据为对称加密,经过研究,发现了一些问题: 1.DES对称ECB模式加密的数据,长度必须为8的倍数 2.加密的数据,加密后先转码(因为加密后的数据我 ...

  7. des加密解密 代码 java_java 实现DES 加密解密的示例

    package com.cn.peitest; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.cryp ...

  8. java socket 加密,Java socket通信实现DES加密与解密

    DES是对称加密算法的其中一个,用一个密钥进行加密解密数据,安全性能比较低,效率较高,一些不太重要的数据可以使用DES加密算法进行加密解密传输,其他的3DES与AES用法类似. 流程图 首先认真看一下 ...

  9. (三)Kotlin加密/解密之AES和DES

    Kotlin加密/解密系列 (一)Kotlin加密/解密之ASCII码 (二)Kotlin加密/解密之凯撒加密算法 文章目录 Kotlin加密/解密系列 前言 一.加密算法 二.Base64编码 1. ...

  10. C#.Net中的加密解密(AES、DES、RSA、MD5)、数字证书、HTTPS

    一.信息安全的基本概念,以及为什么要使用加密? 1.信息安全的定义 保密性(Confidentiality)  只有你自己和你允许的人能看到相关的信息. 完整性(Integrity)  信息收发过程中 ...

最新文章

  1. JavaScript强化教程——JavaScript 运算符
  2. [YTU]_2018 ( 约瑟夫问题)
  3. 经典!MATLAB线性等分linspace()函数,精确等分点数
  4. Flowable最新版(6.4) 新特性
  5. 全面预测我国量子通信市场规模及发展趋势
  6. 【Python基础入门系列】第06天:Python 模块和包
  7. c语言中for优化,c – 在For循环中发生了什么GCC优化?
  8. CMU Deep Learning 2018 by Bhiksha Raj 学习记录(8)
  9. 停航63天!湖北复航了,机票预订火爆程度堪比春运
  10. WPF XMAL获取元素的父元素,子元素
  11. Atitit gis之道 attilax著
  12. 学校固定资产管理系统由谁来做,云呐RFID固定资产管理系统
  13. 任天堂残酷马里奥游戏
  14. 华为服务器自检信息怎么开,服务器开机自检内存
  15. C语言:梯形面积的求解公式为 S = (a + b) * h / 2。从键盘读入一个梯形的上底a、下底b和高h,请计算表梯形的面积。(结果保留1位小数)
  16. 论运营型CRM和分析型CRM
  17. 中职计算机c语言课程,中职计算机C语言教学探讨
  18. pages文件夹 AddCartSuccess Center Detail Home Login Pay PaySuccess
  19. Java SHA-256 算法实例
  20. 【技术】5G技术的应用场景及发展趋势

热门文章

  1. 使用APICloud AVM多端框架开发课程表功能
  2. 计算机主板的接口结构名称10,[pc玩家]主板接口大盘点,细数历年主流的主板接口:内部接口...
  3. 快乐数Python解法
  4. html英雄联盟网页,Html+Css+JQuery实现简易英雄联盟官网
  5. Windos下的UPD服务器端的C++实现
  6. 浅谈腾讯云IM接入方式(java后端)
  7. 树莓派是什么?能干什么?
  8. python:IndentationError:expected an indented block
  9. Linux虚拟机配置防火墙和软件安装限制
  10. tomcat设置一级域名、二级域名访问指定项目