MD5值转换(Hex 32位 <-> base64 24位)

关于MD5值的原理本文不在介绍,本文主要介绍MD5值的两种编码的相互转换(32位和BASE64编码的24位),实际应用过程中经常会涉及到两种编码的相互转换。快熟使用工具tomeko.net

C#示例程序:

using System;
using System.Text;

namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            string original = "123456";

            Console.WriteLine("original: " + original);

            var md5Hex = BitConverter.ToString(new System.Security.Cryptography.MD5CryptoServiceProvider().ComputeHash(Encoding.Default.GetBytes(original))).Replace("-", "").ToLower();
            Console.WriteLine("md5Hex: " + md5Hex);

            //b64是以=结尾的长度为24位的密文
            var b64 = Convert.ToBase64String(new System.Security.Cryptography.MD5CryptoServiceProvider().ComputeHash(Encoding.Default.GetBytes(original)));
            Console.WriteLine("b64: " + b64);

            //b64Tomd5Hex
            var b64Tomd5Hex = BitConverter.ToString(new System.Security.Cryptography.FromBase64Transform().TransformFinalBlock(Encoding.Default.GetBytes(b64), 0, Encoding.Default.GetBytes(b64).Length)).Replace("-", "").ToLower();
            Console.WriteLine("b64Tomd5Hex: " + b64Tomd5Hex);

            //md5HexToBase64
            string md5HexToBase64 = HexString2B64String(md5Hex);
            Console.WriteLine("md5HexToBase64: " + md5HexToBase64);

            Console.ReadKey(true);
        }

        /// <summary>
        /// 32位md5转24位base64
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public static string HexString2B64String(string input)
        {
            return Convert.ToBase64String(HexStringToHex(input));
        }

        public static byte[] HexStringToHex(string inputHex)

        {
            var resultantArray = new byte[inputHex.Length / 2];
            for (var i = 0; i < resultantArray.Length; i++)
            {
                resultantArray[i] = Convert.ToByte(inputHex.Substring(i * 2, 2), 16);
            }
            return resultantArray;
        }
    }
}

测试结果:

original: 123456
md5Hex: e10adc3949ba59abbe56e057f20f883e
b64: 4QrcOUm6Wau+VuBX8g+IPg==
b64Tomd5Hex: e10adc3949ba59abbe56e057f20f883e
md5HexToBase64: 4QrcOUm6Wau+VuBX8g+IPg==

原文地址:https://www.cnblogs.com/taro/p/8633873.html

时间: 2024-11-14 13:01:52

MD5值转换(Hex 32位 <-> base64 24位)的相关文章

C#图片灰度处理(位深度24→位深度8)、C#图片二值化处理(位深度8→位深度1)

C#图片灰度处理(位深度24→位深度8) #region 灰度处理 /// <summary> /// 将源图像灰度化,并转化为8位灰度图像. /// </summary> /// <param name="original"> 源图像. </param> /// <returns> 8位灰度图像. </returns> public static Bitmap RgbToGrayScale(Bitmap orig

【数字图像】C++8位和24位BMP位图的平滑、锐化、二值化处理,以及24位真彩图的灰度化

头文件: typedef unsigned char BYTE; typedef unsigned short WORD; typedef unsigned int DWORD; typedef long LONG; //BMP文件头(14字节) typedef struct tagBITMAPFILEHEADER { //WORD bfType;//位图文件的类型,必须为BM(在结构体中读取会发生错误,所以在函数中读取) DWORD bfSize;//位图文件的大小,以字节为单位 WORD b

C#图片灰度处理(位深度24→位深度8)

#region 灰度处理 /// <summary> /// 将源图像灰度化,并转化为8位灰度图像. /// </summary> /// <param name="original"> 源图像. </param> /// <returns> 8位灰度图像. </returns> public static Bitmap RgbToGrayScale(Bitmap original) { if (original

颜色模式中8位,16位,24位,32位色彩是什么意思?会有什么区别?计算机颜色格式( 8位 16位 24位 32位色)&lt;转&gt;

颜色模式中8位,16位,24位,32位色彩是什么意思?会有什么区别简单地说这里说的位数和windows系统显示器设置中的颜色位数是一样的.表示的是能够显示出来的颜色的多少. 8位的意思是说,能够显示出来的颜色的数量有8位数.16.24都是一样的.24位的颜色数量已经很多了,叫做“真彩色”,其实32位和24位颜色数量是一样多的.32位多出来的8位数是用来表示透明度信息的,所以更加真实. 如果一有一张真彩色的照片,放到一个只有8位的显示器上的话,显示出来的效果就会很差.所以当需要的时候你就需要在低位

C# 获取MD5值

class CommonHelper { /// <summary> /// 通过字符串获取MD5值,返回32位字符串. /// </summary> /// <param name="str"></param> /// <returns></returns> public static string GetMD5String(string str) { MD5 md5 = MD5.Create(); byte[]

linux下md5sum用法 (查看文件或字符串的md5值)

MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改.MD5 全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意长度的信息逐位进行计算,产生一个二进制长度为128位(十六进制长度就是32位)的"指纹"(或称"报文摘要"),不同的文件产生相同的报文摘要的可能性是非常非常之小的. md5sum命令采用MD5报文摘要算法(128位)计算和检查文件的校验和.一般来说,安装了Linux后,就会有md5sum这个工具,直接在命令行

Linux下C语言计算文件的md5值(32位的)

google了好久都没有找到合适的,其实我只需要一个函数,能计算文件的 md5 值就好, 后来找到了 md5.h 和 md5.c 的源文件,仿照别人的封装了个函数(他那个有问题,和 md5sum 计算出来的都不一样). 废话少说,直接贴代码: (再废一句话,如果只想计算字符串的md5值,把字符串传给 MD5Update 函数一次就好) #include "md5.h" #include <stdio.h> #include <stdlib.h> #include

如何将24位RGB颜色转换16位RGB颜色

有许多朋友第一次使用16位彩色显示屏会遇到如何将24位RGB颜色转换为对应的16位RGB颜色的问题,通过查阅相关资料,就写一下其中的转换原理吧,希望对大家会有所帮助. 我们知道24位RGB是分别由8位红色,8位绿色以及8位蓝色组成: RRRRRRRR GGGGGGGG BBBBBBBB 例如:24位RGB红色表示方法为 11111111 00000000 00000000        (十六进制表示为:0xFF0000) 而对应的16位RGB颜色则是由5位红色,6位绿色以及5位红色组成: RR

24位颜色和32位颜色对比

1.24位颜色和32位颜色对比 RGB  :24位颜色,(R,G,B)         3个16进制数 ARGB:32位颜色,(A,R,G,B)   4个16进制数 A值:不透明度 R值:红色比例 G值:绿色比例 B值:蓝色比例 ps: Android开发中最好使用32位代码 2.Android开发中如何使控件背景透明 android:background="#01000000" #01000000”中“01”表示的是背景透明的程度,这个值只能设置01及以上的值,不能设置为00,及不能