位置: 编程技术 - 正文

Base64、DES、MD5加密解密原理

编辑:rootadmin

推荐整理分享Base64、DES、MD5加密解密原理,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

一、编码规则 Base编码的思想是是采用个基本的ASCII码字符对数据进行重新编码。它将需要编码的数据拆分成字节数组。以3个字节为一组。按顺序排列 位数据,再把这位数据分成4组,即每组6位。再在每组的的最高位前补两个0凑足一个字节。这样就把一个3字节为一组的数据重新编码成了4个字节。当所要编码的数据的字节数不是3的整倍数,也就是说在分组时最后一组不够3个字节。这时在最后一组填充1到2个0字节。并在最后编码完成后在结尾添加1到2个 “=”。

例:将对ABC进行BASE编码:

1、首先取ABC对应的ASCII码&#;。A()B()C();2、再取二进制&#;A()B()C(); 3、然后把这三个字节的二进制码接起来();4、 再以6位为单位分成4个数据块,并在最高位填充两个0后形成4个字节的编码后的&#;,()()()(),其中蓝色部分为真实数据; 5、再把这四个字节数据转化成进制数得()()(9)(3); 6、最后根据BASE给出的个基本字符表,查出对应的ASCII码字符(Q)(U)(J)(D),这里的&#;实际就是数据在字符表中的索引。

Base64、DES、MD5加密解密原理

注:BASE字符表:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&#;/

二、解码规则 解码过程就是把4个字节再还原成3个字节再根据不同的数据形式把字节数组重新整理成数据。

三、C#中的实现

编码类:

/// <summary> /// Base编码类。 /// 将byte[]类型转换成Base编码的string类型。 /// </summary> public class BaseEncoder { byte[] source; int length, length2; int blockCount; int paddingCount; public static BaseEncoder Encoder = new BaseEncoder(); public BaseEncoder() { } private void init(byte[] input) { source = input; length = input.Length; if ((length % 3) == 0) { paddingCount = 0; blockCount = length / 3; } else { paddingCount = 3 - (length % 3); blockCount = (length &#; paddingCount) / 3; } length2 = length &#; paddingCount; } public string GetEncoded(byte[] input) { //初始化 init(input); byte[] source2; source2 = new byte[length2]; for (int x = 0; x < length2; x&#;&#;) { if (x < length) { source2[x] = source[x]; } else { source2[x] = 0; } } byte b1, b2, b3; byte temp, temp1, temp2, temp3, temp4; byte[] buffer = new byte[blockCount * 4]; char[] result = new char[blockCount * 4]; for (int x = 0; x < blockCount; x&#;&#;) { b1 = source2[x * 3]; b2 = source2[x * 3 &#; 1]; b3 = source2[x * 3 &#; 2]; temp1 = (byte)((b1 & ) >> 2); temp = (byte)((b1 & 3) << 4); temp2 = (byte)((b2 & ) >> 4); temp2 &#;= temp; temp = (byte)((b2 & ) << 2); temp3 = (byte)((b3 & ) >> 6); temp3 &#;= temp; temp4 = (byte)(b3 & ); buffer[x * 4] = temp1; buffer[x * 4 &#; 1] = temp2; buffer[x * 4 &#; 2] = temp3; buffer[x * 4 &#; 3] = temp4; } for (int x = 0; x < blockCount * 4; x&#;&#;) { result[x] = sixbit2char(buffer[x]); } switch (paddingCount) { case 0: break; case 1: result[blockCount * 4 - 1] = '='; break; case 2: result[blockCount * 4 - 1] = '='; result[blockCount * 4 - 2] = '='; break; default: break; } return new string(result); } private char sixbit2char(byte b) { char[] lookupTable = new char[]{ 'A','B','C','D','E','F','G','H','I','J','K','L','M', 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z', 'a','b','c','d','e','f','g','h','i','j','k','l','m', 'n','o','p','q','r','s','t','u','v','w','x','y','z', '0','1','2','3','4','5','6','7','8','9','&#;','/'}; if ((b >= 0) && (b <= )) { return lookupTable[(int)b]; } else { return ' '; } } }

解码类:

/// <summary> /// Base解码类 /// 将Base编码的string类型转换成byte[]类型 /// </summary> public class BaseDecoder { char[] source; int length, length2, length3; int blockCount; int paddingCount; public static BaseDecoder Decoder = new BaseDecoder(); public BaseDecoder() { } private void init(char[] input) { int temp = 0; source = input; length = input.Length; for (int x = 0; x < 2; x&#;&#;) { if (input[length - x - 1] == '=') temp&#;&#;; } paddingCount = temp; blockCount = length / 4; length2 = blockCount * 3; } public byte[] GetDecoded(string strInput) { //初始化 init(strInput.ToCharArray()); byte[] buffer = new byte[length]; byte[] buffer2 = new byte[length2]; for (int x = 0; x < length; x&#;&#;) { buffer[x] = char2sixbit(source[x]); } byte b, b1, b2, b3; byte temp1, temp2, temp3, temp4; for (int x = 0; x < blockCount; x&#;&#;) { temp1 = buffer[x * 4]; temp2 = buffer[x * 4 &#; 1]; temp3 = buffer[x * 4 &#; 2]; temp4 = buffer[x * 4 &#; 3]; b = (byte)(temp1 << 2); b1 = (byte)((temp2 & ) >> 4); b1 &#;= b; b = (byte)((temp2 & ) << 4); b2 = (byte)((temp3 & ) >> 2); b2 &#;= b; b = (byte)((temp3 & 3) << 6); b3 = temp4; b3 &#;= b; buffer2[x * 3] = b1; buffer2[x * 3 &#; 1] = b2; buffer2[x * 3 &#; 2] = b3; } length3 = length2 - paddingCount; byte[] result = new byte[length3]; for (int x = 0; x < length3; x&#;&#;) { result[x] = buffer2[x]; } return result; } private byte char2sixbit(char c) { char[] lookupTable = new char[]{ 'A','B','C','D','E','F','G','H','I','J','K','L','M','N', 'O','P','Q','R','S','T','U','V','W','X','Y', 'Z', 'a','b','c','d','e','f','g','h','i','j','k','l','m','n', 'o','p','q','r','s','t','u','v','w','x','y','z', '0','1','2','3','4','5','6','7','8','9','&#;','/'}; if (c == '=') return 0; else { for (int x = 0; x < ; x&#;&#;) { if (lookupTable[x] == c) return (byte)x; } return 0; } } } //解码类结束提示:上面的代码只是说明base编码的原理,以便用更多语言重写。但.net里面可以使用更简单的方法:编码:byte[] bytes=Encoding.Default.GetBytes("要转换的字符串");Convert.ToBaseString(bytes);解码:byte[] outputb = Convert.FromBaseString("ztKwrsTj");string orgStr= Encoding.Default.GetString(outputb);四.C#中DES和MD5的加密解密处理

从Unity引擎过度到Unreal4引擎(最终版) 前言寒假回家到现在已经有十多天了,这些天回家不是睡就是吃....哎╮(╯▽╰)╭,今天早上一觉醒来,突然得知,UE4免费了,这绝对是个好消息,前

Unity shader教程-第六课:Ramp Texture 本文首发地址:

Unity增强现实功能的实现 首先先在

标签: Base64、DES、MD5加密解密原理

本文链接地址:https://www.jiuchutong.com/biancheng/381539.html 转载请保留说明!

上一篇:[置顶] 高通AR增强现实最新教程unity3d(置顶高手)

下一篇:从Unity引擎过度到Unreal4引擎(最终版)(unity引擎占用内存多少)

  • 偷税与漏税的界限是
  • 进口货物的完税价格不包括
  • 劳务发票打款用途写什么
  • 建设工程劳务分包的规定
  • 广告费的明细
  • 进项抵扣用不完怎么处理
  • 电信要收取安装费吗
  • 定期定额的个税起征点
  • 异地施工需要办理什么手续
  • 软件企业收到先征后返的增值税税款是否要缴纳企业所得税
  • 企业年金个人所得税扣除标准
  • 个体工商户生产经营所得税率
  • 会计人士教你在Excel中如何计算年均增长率
  • 车辆购置税退税申请表
  • 手写农产品发票有效吗
  • 运费抵扣增值税是什么意思
  • 代开的专票怎么做账?
  • 企业收到稳岗补贴的账务处理
  • 附赠产品销售是合法还是违法
  • 分支机构分配表 资产总额无法区分怎么办
  • 季度缴纳所得税如何做账
  • 采购材料差旅费怎么入账
  • 取得甲供材料按简易征收发票能抵扣吗
  • 经营收入怎么做分录
  • 商业承兑汇票贴现为什么是短期借款
  • 财政拨款税务处理方法
  • 减免税备案申请表范文
  • 家具螺丝螺母一般在哪里卖
  • 公司设备租赁给客户怎么做科目
  • 分配的水电费属于什么会计要素
  • u盘装机大师怎么用
  • 维尔登的心结
  • 估价入库金额怎么来
  • laravel添加数据
  • 分公司怎么开独立开票
  • chrome安装教程
  • ChatGPT火爆来袭,携手参与为开源助力
  • 3d人体骨骼模型软件
  • 一般纳税人企业所得税税率2023
  • 车船使用税代征手续费
  • java集合详解以及底层实现
  • sqlserver连接不到本地服务器
  • centos7.3安装
  • 收到现金股利或债券利息时会计分录怎么做
  • 年金终值系数是指已知( ),求终值
  • 一般纳税人企业所得税税率2023
  • 文化事业建设费计入什么科目
  • 进项税已认证未缴纳
  • 黄金珠宝加工销售怎么样
  • 增量成本属于什么成本
  • 退货开负数发票的情况该如何做会计处理?
  • 收到专票可以不签字吗
  • 收不回来的其他应收款如何坏账处理
  • 生产成本是费用要素吗
  • sql server m1
  • 将Reporting services的RDL文件拷贝到另外一台机器时报Data at the root level is invalid的解决方法
  • innodb_index_stats导入备份数据时报错表主键冲突的解决方法
  • 电脑bios怎么关
  • win7重装系统之后怎么还原系统
  • centos 安装
  • ixapplet.exe - ixapplet是什么进程 有何作用
  • linux执行sh文件显示不存在
  • hyper虚拟机连接外网
  • win8怎么添加桌面
  • 有usb3.0驱动的win7
  • win7升级win10系统要多久
  • dosbox批处理
  • unity urp 性能
  • easyui下拉列表
  • nginx服务器日志
  • unity账号登录
  • 怎么申请返回
  • jquery调用json数据
  • shell获取脚本进程id号
  • 网页文件的标记是
  • python3.8.3怎么用
  • python3.5怎么保存
  • javascript面向对象精要
  • 国税申报密码忘了怎么办
  • 城镇土地使用税减免税政策
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设