0

0

笔记:des加解密,php和.net版的实现

php中文网

php中文网

发布时间:2016-06-23 14:37:39

|

1175人浏览过

|

来源于php中文网

原创

php5.x版本,要添加php扩展php_mcrypt。

 1 class STD3Des 2 { 3     private $key = ""; 4     private $iv = ""; 5  6     /** 7     * 构造,传递二个已经进行base64_encode的KEY与IV 8     * 9     * @param string $key10     * @param string $iv11     */12     function __construct ($key, $iv)13     {14         if (empty($key) || empty($iv)) {15             echo 'key and iv is not valid';16             exit();17         }18         $this->key = $key;19         $this->iv = $iv;20     }21 22     /**23     *加密24     * @param <type> $value25     * @return <type>26     */27     public function encrypt ($value)28     {29         $td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');30         $iv = base64_decode($this->iv);31         $value = $this->PaddingPKCS7($value);32         $key = base64_decode($this->key);33         mcrypt_generic_init($td, $key, $iv);34         $ret = base64_encode(mcrypt_generic($td, $value));35         mcrypt_generic_deinit($td);36         mcrypt_module_close($td);37         return $ret;38     }39 40     /**41     *解密42     * @param <type> $value43     * @return <type>44     */45     public function decrypt ($value)46     {47         $td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');48         $iv = base64_decode($this->iv);49         $key = base64_decode($this->key);50         mcrypt_generic_init($td, $key, $iv);51         $ret = trim(mdecrypt_generic($td, base64_decode($value)));52         $ret = $this->UnPaddingPKCS7($ret);53         mcrypt_generic_deinit($td);54         mcrypt_module_close($td);55         return $ret;56     }57 58     private function PaddingPKCS7 ($data)59     {60         $block_size = mcrypt_get_block_size('tripledes', 'cbc');61         $padding_char = $block_size - (strlen($data) % $block_size);62         $data .= str_repeat(chr($padding_char), $padding_char);63         return $data;64     }65 66     private function UnPaddingPKCS7($text)67     {68         $pad = ord($text{strlen($text) - 1});69         if ($pad > strlen($text)) {70             return false;71         }72         if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) {73             return false;74         }75         return substr($text, 0, - 1 * $pad);76     }77 }78 79 80 //使用81 include('STD3Des.class.php');82 $key='abcdefgh';83 $iv='abcdefgh';84 $msg='test string';85 $des=new STD3Des(base64_encode($key),base64_encode($iv));86 $rs1=$des->encrypt($msg);87 echo $rs1.'<br />';88 $rs2=$des->decrypt($rs1);89 echo $rs2;

 

.net版本

Perplexity
Perplexity

Perplexity是一个ChatGPT和谷歌结合的超级工具,可以让你在浏览互联网时提出问题或获得即时摘要

下载

  1 sealed public class CryptoHelper  2 {  3     /// <summary>  4     /// Encrypts the specified input.  5     /// </summary>  6     /// <param name="input">The input.</param>  7     /// <param name="key">key</param>  8     /// <param name="iv">iv</param>  9     /// <returns></returns> 10     public static string EncryptDes(string input, byte[] key, byte[] iv) 11     { 12         if (input == null || input.Length == 0) 13             return String.Empty; 14  15         DESCryptoServiceProvider des = new DESCryptoServiceProvider(); 16         MemoryStream ms = null; 17         CryptoStream encStream = null; 18         StreamWriter sw = null; 19         string result = String.Empty; 20  21         try 22         { 23             ms = new MemoryStream(); 24  25             // Create a CryptoStream using the memory stream and the  26             // CSP DES key.   27             //des.Mode = CipherMode.CBC; 28             //des.Padding = PaddingMode.PKCS7;   29             encStream = new CryptoStream(ms, des.CreateEncryptor(key, iv), CryptoStreamMode.Write); 30  31             // Create a StreamWriter to write a string 32             // to the stream. 33             sw = new StreamWriter(encStream); 34  35             // Write the plaintext to the stream. 36             sw.Write(input); 37  38             sw.Flush(); 39             encStream.FlushFinalBlock(); 40             ms.Flush(); 41  42  43             result = Convert.ToBase64String(ms.GetBuffer(), 0, Convert.ToInt32(ms.Length, CultureInfo.InvariantCulture)); 44         } 45         finally 46         { 47             //close objects 48             if (sw != null) 49                 sw.Close(); 50             if (encStream != null) 51                 encStream.Close(); 52             if (ms != null) 53                 ms.Close(); 54         } 55  56         // Return the encrypted string 57         return result; 58     } 59     /// <summary> 60     /// Decrypts the specified input. 61     /// </summary> 62     /// <param name="input">the input.</param> 63     /// <param name="key">key</param> 64     /// <param name="iv">iv</param> 65     /// <returns></returns> 66     public static string DecryptDes(string input, byte[] key, byte[] iv) 67     { 68         byte[] buffer; 69         try { buffer = Convert.FromBase64String(input); } 70         catch (System.ArgumentNullException) { return String.Empty; } 71         // length is zero, or not an even multiple of four (plus a few other cases) 72         catch (System.FormatException) { return String.Empty; } 73  74         DESCryptoServiceProvider des = new DESCryptoServiceProvider(); 75         MemoryStream ms = null; 76         CryptoStream encStream = null; 77         StreamReader sr = null; 78         string result = String.Empty; 79  80         try 81         { 82             ms = new MemoryStream(buffer); 83  84             // Create a CryptoStream using the memory stream and the  85             // CSP DES key.  86             encStream = new CryptoStream(ms, des.CreateDecryptor(key, iv), CryptoStreamMode.Read); 87  88             // Create a StreamReader for reading the stream. 89             sr = new StreamReader(encStream); 90  91             // Read the stream as a string. 92             result = sr.ReadToEnd(); 93         } 94         finally 95         { 96             //close objects 97             if (sr != null) 98                 sr.Close(); 99             if (encStream != null)100                 encStream.Close();101             if (ms != null)102                 ms.Close();103         }104 105         return result;106     }107 }108 109 110 //调用111 112 string key = "abcdefgh";113 string iv = "abcdefgh";114 string msg="test string";115 string rs1 = CryptoHelper.EncryptDes(msg, System.Text.Encoding.ASCII.GetBytes(key), System.Text.Encoding.ASCII.GetBytes(iv));116 string rs2 = CryptoHelper.DecryptDes(rs1, System.Text.Encoding.ASCII.GetBytes(key), System.Text.Encoding.ASCII.GetBytes(iv));

 

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

1044

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

334

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

213

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

35

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

111

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

77

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

17

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

813

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

97

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CSS3 教程
CSS3 教程

共18课时 | 6万人学习

C# 教程
C# 教程

共94课时 | 10万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号