当前位置: 首页 > news >正文

3DES算法

   简介

                 本文基于.NET的C#实现3DES算法的加密和解密过程。可以用在加密软件、加密狗等。          代码下载链接:https://download.csdn.net/download/C_gyl/88487942

使用

  第一种方法

   加密

  1. KeySize:128(16字节),192(24字节)。
  2. Key: TripleDES 算法的密钥。
        public static string Encrypt3DES(string str, string key){try{TripleDESCryptoServiceProvider DES = new TripleDESCryptoServiceProvider();DES.KeySize = 128;DES.Key = Encoding.UTF8.GetBytes(key);DES.Mode = CipherMode.ECB;DES.Padding = PaddingMode.Zeros;ICryptoTransform DESEncrypt = DES.CreateEncryptor();byte[] Buffer = Encoding.UTF8.GetBytes(str);return ToHexString(DESEncrypt.TransformFinalBlock(Buffer, 0, Buffer.Length), str.Length);}catch (Exception ex) { return ex.Message; }}

 解密

        public static string Decrypt3DES(string str, string key){try{TripleDESCryptoServiceProvider DES = new TripleDESCryptoServiceProvider();DES.Key = Encoding.UTF8.GetBytes(key);DES.Mode = CipherMode.ECB;DES.Padding = PaddingMode.Zeros;ICryptoTransform DESDecrypt = DES.CreateDecryptor();byte[] Buffer = HexGetBytes(str);byte[] Destxt = DESDecrypt.TransformFinalBlock(Buffer, 0, Buffer.Length);return Encoding.UTF8.GetString(Destxt, 0, Destxt.Length);}catch (Exception ex) { return ex.Message; }}

  转换

        // byte[]转16进制格式string 0xae00cf => "AE00CF "private static string ToHexString(byte[] bytes, int length){string hexString = string.Empty;if (bytes != null){StringBuilder strB = new StringBuilder();if (length == 0) { length = bytes.Length; }for (int i = 0; i < length; i++){strB.Append(bytes[i].ToString("X2"));}hexString = strB.ToString();} return hexString;}//16进制转byte[]   0x0a => 10private static byte[] HexGetBytes(string hexString){int discarded = 0;string newString = "";char c;// remove all none A-F, 0-9, charactersfor (int i = 0; i < hexString.Length; i++){c = hexString[i];if (Uri.IsHexDigit(c))newString += c;elsediscarded++;}// if odd number of characters, discard last characterif (newString.Length % 2 != 0){discarded++;newString = newString.Substring(0, newString.Length - 1);}int byteLength = newString.Length / 2;byte[] bytes = new byte[byteLength];string hex;int j = 0;for (int i = 0; i < bytes.Length; i++){hex = new String(new Char[] { newString[j], newString[j + 1] });bytes[i] = HexToByte(hex);j = j + 2;}return bytes;}private static byte HexToByte(string hex){byte tt = byte.Parse(hex, System.Globalization.NumberStyles.HexNumber);return tt;}

  第二种方法

  1. 第一种方法有个弊端是.Net会对密钥Key进行判断,例如key="0000000000000000",会有报警"指定密钥是“TripleDES”的已知弱密钥,不能使用。" .Net方法(TripleDES.IsWeakKey),它检查3DES密钥的弱点。
  2. 解释弱密钥参考:Decrypting TripleDES:指定的密钥是已知的弱密钥,不能使用 - VoidCC
  3. 破解若密钥参考:https://www.cnblogs.com/jintianhu/archive/2011/11/26/2264375.html

  加密

        public static string DESEncrypt(string str, string key){try{TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();des.Padding = PaddingMode.Zeros;byte[] keyByte = Encoding.UTF8.GetBytes(key);Type t = Type.GetType("System.Security.Cryptography.CryptoAPITransformMode");object obj = t.GetField("Encrypt", BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly).GetValue(t);MethodInfo mi = des.GetType().GetMethod("_NewEncryptor", BindingFlags.Instance | BindingFlags.NonPublic);ICryptoTransform desCrypt = (ICryptoTransform)mi.Invoke(des, new object[] { keyByte, CipherMode.ECB, null, 0, obj });byte[] Buffer = Encoding.UTF8.GetBytes(str);byte[] result = desCrypt.TransformFinalBlock(Buffer, 0, Buffer.Length);return BitConverter.ToString(result).Replace("-", "");}catch (Exception ex) { return ex.Message; }}

  解密

        public static string DESDecrypt(string str, string key){try{TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();des.Padding = PaddingMode.Zeros;byte[] keyByte = Encoding.UTF8.GetBytes(key);Type t = Type.GetType("System.Security.Cryptography.CryptoAPITransformMode");object obj = t.GetField("Decrypt", BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly).GetValue(t);MethodInfo mi = des.GetType().GetMethod("_NewEncryptor", BindingFlags.Instance | BindingFlags.NonPublic);ICryptoTransform desCrypt = (ICryptoTransform)mi.Invoke(des, new object[] { keyByte, CipherMode.ECB, null, 0, obj });byte[] Buffer = HexGetBytes(str);byte[] Destxt = desCrypt.TransformFinalBlock(Buffer, 0, Buffer.Length);return Encoding.UTF8.GetString(Destxt, 0, Destxt.Length);}catch (Exception ex) { return ex.Message; }}

结果 

        static void Main(string[] args){string str = "12345678";//长度是8的倍数string key = "1234567812345678"; //长度是16或24//第一种方法//有密钥检测//"指定密钥是“TripleDES”的已知弱密钥,不能使用。"string strEncrypt1 = Encrypt3DES(str, key);System.Console.WriteLine("加密结果1:" + strEncrypt1);string strDecrypt1 = Decrypt3DES(strEncrypt1, key);System.Console.WriteLine("解密结果1:" + strDecrypt1);//第二种方法//无弱密钥检测string strEncrypt2 = DESEncrypt(str, key);System.Console.WriteLine("加密结果2:" + strEncrypt2);string strDecrypt2 = DESDecrypt(strEncrypt2, key);System.Console.WriteLine("解密结果2:" + strDecrypt2);Console.ReadKey();}

 key = "1234567890123456"

 key = "1234567812345678"

相关文章:

3DES算法

简介 本文基于.NET的C#实现3DES算法的加密和解密过程。可以用在加密软件、加密狗等。 代码下载链接&#xff1a;https://download.csdn.net/download/C_gyl/88487942 使用 第一种方法 加密 KeySize&#xff1a;128(16字节)&#xff0c;192&#xff08;24字节&#x…...

手机电池寿命检测

安卓 - 应用商店下载“安兔兔” -accubattery 下载地址 accubattery汉化版下载-Accubattery pro中文免费版(电池检测)下载 v1.5.11 安卓专业版-IT猫扑网...

Vue项目搭建及使用vue-cli创建项目、创建登录页面、与后台进行交互,以及安装和使用axios、qs和vue-axios

目录 1. 搭建项目 1.1 使用vue-cli创建项目 1.2 通过npm安装element-ui 1.3 导入组件 2 创建登录页面 2.1 创建登录组件 2.2 引入css&#xff08;css.txt&#xff09; 2.3 配置路由 2.5 运行效果 3. 后台交互 3.1 引入axios 3.2 axios/qs/vue-axios安装与使用 3.2…...

AVL树、红黑树的介绍和实现[C++]

本文主要对AVL树和红黑树的结构和实现方法进行一定的介绍&#xff0c;仅实现部分接口。 目录 一、AVL树 1.AVL树的概念 2.AVL树节点的定义 3.AVL树的插入 4.AVL树的旋转 1. 新节点插入较高左子树的左侧——左左&#xff1a;右单旋 2. 新节点插入较高右子树的右侧——右…...

meta分析的异质性检验指标如何计算?

一、什么是异质性&#xff1f; 广义&#xff1a;描述参与者、干预措施和一系列研究间测量结果的差异和多样性&#xff0c;或那些研究中内在真实性的变异。 狭义&#xff1a;统计学异质性&#xff0c;用来描述一系列研究中效应量的变异程度&#xff0c;也用于表明除仅可预见的…...

如何在mac 安装 cocos 的 android环境

基本概念&#xff1a; Java: Java 是一种编程语言&#xff0c;由Sun Microsystems&#xff08;现在是 Oracle Corporation&#xff09;开发。Java 是一种跨平台的语言&#xff0c;可以用于开发各种应用程序&#xff0c;包括 Android 应用程序。Android 应用程序的核心代码通常用…...

作为网工有必要了解一下什么是SRv6?

什么是SRv6&#xff1f; 【微|信|公|众|号&#xff1a;厦门微思网络】 【微思网络http://www.xmws.cn&#xff0c;成立于2002年&#xff0c;专业培训21年&#xff0c;思科、华为、红帽、ORACLE、VMware等厂商认证及考试&#xff0c;以及其他认证PMP、CISP、ITIL等】 SRv6&…...

Jmeter(十八):硬件性能监控指标详解

硬件性能监控指标 一、性能监控初步介绍 性能测试的主要目标 1.在当前的服务器配置情况&#xff0c;最大的用户数 2.平均响应时间ART&#xff0c;找出时间较长的业务 3.每秒事务数TPS&#xff0c;服务器的处理能力 性能测试涉及的内容 1.客户端性能测试&#xff1a;web前…...

【ARM Trace32(劳特巴赫) 使用介绍 2 -- Trace32 cmm 脚本基本语法及常用命令】

文章目录 Trace32 CMM 概述1.1 Trace32 系统命令 SYStem1.1.1 Trace32 SYStem.CONFIG1.1.2 SYStem.MemAccess1.1.3 SYStem.Mode1.1.3.1 TRST-Resets the JTAG TAP controller and the CPU internal debug logic1.1.3.2 SRST- Resets the CPU core and peripherals 1.2 Trace32 …...

2023年第七期丨全国高校大数据与人工智能师资研修班

全国高校大数据与人工智能 师资研修班邀请函 2023年第七期 线下班&#xff08;昆明&#xff09;&#xff1a; 数据采集与机器学习实战 线上班&#xff08;七大专题&#xff09;: PyTorch深度学习与大模型应用实战 数据采集与处理实战 大数据分析与机器学习实战 大数据技…...

一文获取鼎捷医疗器械行业数智化合规敏态方案

医疗器械产业是关乎国计民生的重要产业&#xff0c;高端医疗器械更是“国之重器”。为加强医疗器械的监督管理&#xff0c;提升行业质量和安全整体水平&#xff0c;我国出台了《医疗器械监督管理条例》、《医疗器械召回管理办法》、《医疗器械临床试验质量管理规范》、《医疗器…...

2023最新版本 FreeRTOS教程 -1-标准库移植FreeRTOS

源码下载 官网下载驱动 点击直达 源码剪裁 剪裁之后的图片,找我免费获取 添加进MDK 配置滴答定时器 全部工程获取 查看下方头像...

python笔记(函数参数、面向对象、装饰器、高级函数、捕获异常)

Python 笔记 函数参数 默认参数 在Python中&#xff0c;我们可以为函数的参数设置默认值。如果调用函数时没有传递参数&#xff0c;那么参数将使用默认值。 def greet(nameWorld):print(f"Hello, {name}!")greet() # 输出&#xff1a;Hello, World! greet…...

JAVA命令总结

jps命令的基本语法如下&#xff1a; jps [options] [hostid]其中&#xff0c;options是可选参数&#xff0c;用于指定额外的选项&#xff0c;hostid是可选参数&#xff0c;用于指定在远程主机上执行jps命令。 以下是一些常用的jps命令选项&#xff1a; -q&#xff1a;仅显示…...

删除的PPT怎么找回来?4个必备恢复方法!

“最近的期末展示需要制作一个PPT&#xff0c;我熬了几个大夜才完成了&#xff0c;但是不知道怎么的我在删除其他文件时不小心把这个PPT一起删掉了&#xff0c;有什么方法可以帮我找回这个误删的PPT吗&#xff1f;” 我们在工作和学习中&#xff0c;经常都需要使用到PPT&#x…...

Binder机制总结笔记

Binder机制总结笔记 什么是Binder&#xff1f; Binder的Android特有的IPC通信机制。Android的四大组件Activity、Service、Broadcast、ContentProvider&#xff0c;不同的App等都运行在不同的进程内&#xff0c;他们之间的通信都需要依靠Binder完成。因此Binder在整个Android系…...

SQL SERVER 表分区

1. 概要说明 SQL SERVER的表分区功能是为了将一个大表&#xff08;表中含有非常多条数据&#xff09;的数据根据某条件&#xff08;仅限该表的主键&#xff09;拆分成多个文件存放&#xff0c;以提高查询数据时的效率。创建表分区的主要步骤是 1、确定需要以哪一个字段作为分…...

从零开始学习PX4源码0(固件下载及编译)

目录 文章目录目录摘要1.重点学习网址2.固件下载1.下载最新版本固件2.下载之前版本固件 摘要 本节主要记录从零开始学习PX4源码1(固件下载)的过程,欢迎批评指正!!! 下载固件主要分为两个版本,之前稳定版本和最新官网发布版本,为什么要下载两个版本,主要是说明两个版本有…...

centos格式化硬盘/u盘的分区为NTFS格式

centos7好像不支持ntfs&#xff1f; 对报这个&#xff0c;ntfs not configured in kernel。 安装了ntfs-3g就可以访问了。 插上u盘查看u盘设备 #查看硬件设备及挂载目录 df -h #查看硬件设备&#xff08;包括未挂载的&#xff09; fdisk -l卸载外部设备 umount /dev/sdbxxx …...

【工具】FreePic2PDF+PdgCntEditor|PDF批量添加书签(Windows)

这俩软件都不大&#xff0c;比较便携。 FreePic2PDF&#xff1a; 我下载的来源&#xff1a;https://www.52pojie.cn/thread-1317140-1-1.html&#xff08;包含下载链接https://www.lanzoui.com/it4x6j4hbvc&#xff09;下载的结果&#xff1a;https://pan.baidu.com/s/1r8n5G42…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...