精华内容
下载资源
问答
  • 在线十六进制编辑器支持Base64 + LZJB编码的URL,以将数据加载到其中。 这个特定的LZJB生成与HexEd.it期望相同的字节流。 其他的(例如 )则没有。 请注意, Iuppiter.js的Base64实现似乎不兼容,不正确或有故障。...
  • 针对网络能耗和延迟问题,提出了一种基于免疫代理的数据融合算法。通过代理的自由迁移降低节点传输能耗;...采用十六进制编码方法对融合数据进行压缩处理。试验结果表明,该算法能有效降低网络能耗和延迟。
  • Java加密算法---MD5

    千次阅读 2016-09-20 16:46:24
    MD5的主要作用是将数据量巨大的信息用数字签名软件签署私人密钥前被"压缩"成一种保密的格式,也就是说把一个任意长度的字节串变换成一定长的十六进制数字串。 MD5算法详解:MD5以512位分组来处理输入的信息,且...

    MD5算法介绍:MD5即Message-Digest Algorithm 5(信息摘要算法5),用于确保信息传输完整一致。MD5的主要作用是将数据量巨大的信息用数字签名软件签署私人密钥前被"压缩"成一种保密的格式,也就是说把一个任意长度的字节串变换成一定长的十六进制数字串。


    MD5算法详解:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。


    使用Java通过的API实现MD5加密程序如下:

    <span style="font-size:18px;">import java.security.MessageDigest;
    
    public class MD5 {
    	
    	public static final String KEY_MD5 = "MD5";
    	public static char hexDigits[]={'0','1','2','3','4','5','6','7','8','9',
    									'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'};
    	//MD5加密
    	public static byte[] encryptMD5(byte[] data) throws Exception {
    		MessageDigest md5 = MessageDigest.getInstance(KEY_MD5);
    		md5.update(data);
    		return md5.digest();
    	}
    	
    	public static void main(String[] args) throws Exception {
    		String inputStr="这是一个测试字符串aaabbbccc111222333";
    		System.out.println("原始数据:"+inputStr);
    			
    		byte[] inputData = inputStr.getBytes();
    		byte[] outDate =  encryptMD5(inputData);
    		System.out.println("原始加密数据:"+outDate);
    		
    		//把密文转换成16进制字符串的形式
    		int j = outDate.length;
            char str[] = new char[j * 2];
            int k = 0;
            for (int i = 0; i < j; i++) {
                byte byte0 = outDate[i];
                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
                str[k++] = hexDigits[byte0 & 0xf];
            }
            System.out.print("16进制字符串形式密文:");
            System.out.println(str);
    	}
    	
    }
    import java.security.MessageDigest;
    
    public class MD5 {
    	
    	public static final String KEY_MD5 = "MD5";
    	public static char hexDigits[]={'0','1','2','3','4','5','6','7','8','9',
    									'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'};
    	//MD5加密
    	public static byte[] encryptMD5(byte[] data) throws Exception {
    		MessageDigest md5 = MessageDigest.getInstance(KEY_MD5);
    		md5.update(data);
    		return md5.digest();
    	}
    	
    	public static void main(String[] args) throws Exception {
    		String inputStr="这是一个测试字符串aaabbbccc111222333";
    		System.out.println("原始数据:"+inputStr);
    			
    		byte[] inputData = inputStr.getBytes();
    		byte[] outDate =  encryptMD5(inputData);
    		System.out.println("原始加密数据:"+outDate);
    		
    		//把密文转换成16进制字符串的形式
    		int j = outDate.length;
            char str[] = new char[j * 2];
            int k = 0;
            for (int i = 0; i < j; i++) {
                byte byte0 = outDate[i];
                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
                str[k++] = hexDigits[byte0 & 0xf];
            }
            System.out.print("16进制字符串形式密文:");
            System.out.println(str);
    	}
    	
    }
    </span>

    输出结果为:

    <span style="font-size:18px;">原始数据:这是一个测试字符串aaabbbccc111222333
    原始加密数据:[B@17e121c
    16进制字符串形式密文:ECE58955645D34EBC31EC9FD9DE69581</span>



    展开全文
  • 这些操作包括简单的编码(例如XOR或Base64),更复杂的加密(例如AES,DES和Blowfish),创建二进制和十六进制转储,数据压缩和解压缩,计算哈希和校验和,IPv6和X.509解析,更改字符编码等等。 。 该工具旨在使...
  • MD5算法

    2018-04-29 20:56:03
    成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。MD5属于消息摘要,不属于严格意义上的加密算法。它只是将数据按照指定算法压缩成长度固定的摘要信息,并非用于还原数据3:MD5算法...
    1;定义MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。
    2:作用让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。
    MD5属于消息摘要,不属于严格意义上的加密算法。它只是将数据按照指定算法压缩成长度固定的摘要信息,并非用于还原数据
    3MD5算法原理
    1)填充:首先将输入信息的长度(bit)进行填充,使得对512求余的结果等于448。填充的方法是填充一个1和n个0。
    2)记录信息长度:用64位来存储填充前信息长度。这64位加在第一步结果的后面,这样信息长度就变为N*512+448+64=(N+1)*512位。
    3)装入标准的幻数:标准的幻数是(A=(01234567)16,B=(89ABCDEF)16,C=(FEDCBA98)16,D=(76543210)16)。如果在程序中定义应该是(A=0X67452301L,B=0XEFCDAB89L,C=0X98BADCFEL,D=0X10325476L)。
    4)四轮循环运算:循环的次数是分组的个数(N+1)。
    4:MD5算法的用途
    1、防止被篡改
      2、防止直接看到明文,
      3、防止抵赖(数字签名)
    展开全文
  • MD5算法实现

    千次阅读 2016-12-28 09:52:23
    让大容量信息在用数字签名软件签署私人密钥前被”压缩”成一种保密的格式(把一个任意长度的字节串变换成一定长的十六进制字符串)。 基础原理 将数据运算为另一固定长度值,是杂凑算法的基础原理。 特点 (1)压缩...

    MD5
    概念
    是计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。
    作用
    用于确保信息传输完整一致,属于杂凑算法(又称为摘要算法,哈希算法)。
    让大容量信息在用数字签名软件签署私人密钥前被”压缩”成一种保密的格式(把一个任意长度的字节串变换成一定长的十六进制字符串)。
    基础原理
    将数据运算为另一固定长度值,是杂凑算法的基础原理。
    特点
    (1)压缩性:任意长度数据算出的MD5值长度固定
    (2)容易计算:从原数据计算出MD5值很容易
    (3)抗修改性:对原数据进行任何改动,所得到的MD5值都有很大区别
    (4)强抗碰撞:已知原数据和MD5值,想找一个相同的MD5值得数据是分厂困难的

    C++代码示例,来自百度百科,MD5已经被别人实现了,那我们知道它的原理作用拿来用就好了,我就不写了,剖析懂代码就好,我只加了一小部分用于将16进制数转换为10进制0~1023大小的数字的

    #include<iostream>
    #include<string>
    #include<cmath>
    using namespace std;
    //填充操作,使得信息位长恰好是512的倍数
    #define shift(x, n) (((x) << (n)) | ((x) >> (32-(n))))//右移的时候,高位一定要补零,而不是补充符号位
    //MD5有四轮运算,将原先数据分为4个32位分组组成,选其中三个进行运算
    #define F(x, y, z) (((x) & (y)) | ((~x) & (z)))    
    #define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
    #define H(x, y, z) ((x) ^ (y) ^ (z))
    #define I(x, y, z) ((y) ^ ((x) | (~z)))
    
    #define A 0x67452301
    #define B 0xefcdab89
    #define C 0x98badcfe
    #define D 0x10325476//初始化变量,用于第一轮   
    //strBaye的长度
    unsigned int strlength;
    //A,B,C,D的临时变量
    unsigned int atemp;
    unsigned int btemp;
    unsigned int ctemp;
    unsigned int dtemp;
    //常量ti unsigned int(abs(sin(i+1))*(2pow32))
    const unsigned int k[] = {
        0xd76aa478,0xe8c7b756,0x242070db,0xc1bdceee,
        0xf57c0faf,0x4787c62a,0xa8304613,0xfd469501,0x698098d8,
        0x8b44f7af,0xffff5bb1,0x895cd7be,0x6b901122,0xfd987193,
        0xa679438e,0x49b40821,0xf61e2562,0xc040b340,0x265e5a51,
        0xe9b6c7aa,0xd62f105d,0x02441453,0xd8a1e681,0xe7d3fbc8,
        0x21e1cde6,0xc33707d6,0xf4d50d87,0x455a14ed,0xa9e3e905,
        0xfcefa3f8,0x676f02d9,0x8d2a4c8a,0xfffa3942,0x8771f681,
        0x6d9d6122,0xfde5380c,0xa4beea44,0x4bdecfa9,0xf6bb4b60,
        0xbebfbc70,0x289b7ec6,0xeaa127fa,0xd4ef3085,0x04881d05,
        0xd9d4d039,0xe6db99e5,0x1fa27cf8,0xc4ac5665,0xf4292244,
        0x432aff97,0xab9423a7,0xfc93a039,0x655b59c3,0x8f0ccc92,
        0xffeff47d,0x85845dd1,0x6fa87e4f,0xfe2ce6e0,0xa3014314,
        0x4e0811a1,0xf7537e82,0xbd3af235,0x2ad7d2bb,0xeb86d391 };
    //向左位移数
    const unsigned int s[] = { 7,12,17,22,7,12,17,22,7,12,17,22,7,
    12,17,22,5,9,14,20,5,9,14,20,5,9,14,20,5,9,14,20,
    4,11,16,23,4,11,16,23,4,11,16,23,4,11,16,23,6,10,
    15,21,6,10,15,21,6,10,15,21,6,10,15,21 };
    
    const char str16[] = "0123456789abcdef";
    
    void mainLoop(unsigned int M[])
    {
        unsigned int f, g;
        unsigned int a = atemp;
        unsigned int b = btemp;
        unsigned int c = ctemp;
        unsigned int d = dtemp;
        for (unsigned int i = 0; i < 64; i++)
        {
            if (i < 16) {
                f = F(b, c, d);
                g = i;
            }
            else if (i < 32)
            {
                f = G(b, c, d);
                g = (5 * i + 1) % 16;
            }
            else if (i < 48) {
                f = H(b, c, d);
                g = (3 * i + 5) % 16;
            }
            else {
                f = I(b, c, d);
                g = (7 * i) % 16;
            }
            unsigned int tmp = d;
            d = c;
            c = b;
            b = b + shift((a + f + k[i] + M[g]), s[i]);
            a = tmp;
        }
        atemp = a + atemp;
        btemp = b + btemp;
        ctemp = c + ctemp;
        dtemp = d + dtemp;
    }
    /*
    *填充函数
    *处理后应满足bits≡448(mod512),字节就是bytes≡56(mode64)
    *填充方式为先加一个1,其它位补零
    *最后加上64位的原来长度
    */
    unsigned int* add(string str)
    {
        unsigned int num = ((str.length() + 8) / 64) + 1;//以512位,64个字节为一组
        unsigned int *strByte = new unsigned int[num * 16];    //64/4=16,所以有16个整数
        strlength = num * 16;
        for (unsigned int i = 0; i < num * 16; i++)
            strByte[i] = 0;
        for (unsigned int i = 0; i < str.length(); i++)
        {
            strByte[i >> 2] |= (str[i]) << ((i % 4) * 8);//一个整数存储四个字节,i>>2表示i/4 一个unsigned int对应4个字节,保存4个字符信息
        }
        strByte[str.length() >> 2] |= 0x80 << (((str.length() % 4)) * 8);//尾部添加1 一个unsigned int保存4个字符信息,所以用128左移
                                                                         /*
                                                                         *添加原长度,长度指位的长度,所以要乘8,然后是小端序,所以放在倒数第二个,这里长度只用了32位
                                                                         */
        strByte[num * 16 - 2] = str.length() * 8;
        return strByte;
    }
    
    string changeHex(int a)
    {
        int b;
        string str1;
        string str = "";
        for (int i = 0; i < 4; i++)
        {
            str1 = "";
            b = ((a >> i * 8) % (1 << 8)) & 0xff;   //逆序处理每个字节
            for (int j = 0; j < 2; j++)
            {
                str1.insert(0, 1, str16[b % 16]);
                b = b / 16;
            }
            str += str1;
        }
        return str;
    }
    
    string getMD5(string source)
    {
        atemp = A;    //初始化
        btemp = B;
        ctemp = C;
        dtemp = D;
        unsigned int *strByte = add(source);
        for (unsigned int i = 0; i < strlength / 16; i++)
        {
            unsigned int num[16];
            for (unsigned int j = 0; j < 16; j++)
                num[j] = strByte[i * 16 + j];
            mainLoop(num);
        }
        return changeHex(atemp).append(changeHex(btemp)).append(changeHex(ctemp)).append(changeHex(dtemp));
    }
    unsigned int main()
    {
        string ss;
        //    cin>>ss;
        string s = getMD5("abc");
        string s2 = getMD5("");
        cout << s << endl;
        cout << s2 << endl;
    
        long hash = 0;//求哈希值的方法
        for (int i = 0; i < 4; i++)
        {
        hash += ((long)(digest[i * 4 + 3] & 0xFF) << 24)
    
                | ((long)(digest[i * 4 + 2] & 0xFF) << 16)
    
                | ((long)(digest[i * 4 + 1] & 0xFF) << 8)
    
                | ((long)(digest[i * 4 + 0] & 0xFF));
    
        }
        cout << "值" << abs(hash%1024) << endl;
        return 0;
    }
    展开全文
  • MD5消息摘要算法

    2015-04-02 16:10:00
    MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式,就是把一个任意长度的字节串变换成一定长的十六进制数字串。 MD5算法的特点: 1.压缩性:任意长度的数据,算出的MD5值长度都是...

    Message Digest 5(消息摘要算法)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。

    MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式,就是把一个任意长度的字节串变换成一定长的十六进制数字串。

    MD5算法的特点:

    1.压缩性:任意长度的数据,算出的MD5值长度都是固定的。

    2.容易计算:从原数据计算出MD5值很容易。

    3.抗修改性:对原数据进行任何改动,哪怕只修改一个字节,所得到的MD5值都会有很大的差别。

    4.强抗碰撞:已知原数据和其MD5值,想找到一个具有相同值的数据(即伪造数据)是非常困难的。

     1  private static string Md5Digest(string input)
     2     {
     3         string result = "";
     4         if (input.Length > 0)
     5         {
     6             byte[] original = Encoding.Default.GetBytes(input);
     7             MD5 s1 = MD5.Create();
     8             byte[] change = s1.ComputeHash(original);
     9             result = BitConverter.ToString(change).Replace("-", string.Empty);
    10         }
    11         return result;
    12     }

     

    转载于:https://www.cnblogs.com/JustYong/p/4387270.html

    展开全文
  • MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式 (也就是把一个任意长度的字节串变换成一定长的十六进制数字串)。 压缩性: 任意长度的数据,算出的MD5值长度都是固定的。 容易...
  • 一个任意长度的字节串变换成一定长度的十六进制的大整数.注意,字符串的转换过程是不可逆的,不能通过加密结果,反向推导出原始内容基本介绍需要导入第三方框架: NSString+HashMD5特点压缩性 : 任意长度的数据,算出的 ...
  • MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被”压缩”成一种保密的格式 (也就是把一个任意长度的字节串变换成一定长的十六进制数字串)。 特点: 压缩性: 任意长度的数据,算出的MD5值长度都是固定...
  • 把一个任意长度的字节串变换成一定长度的十六进制的大整数,用于确保“信息传输”完整一致。 注意: 字符串的转换过程是不可逆的。 MD5 特点: 压缩性: 任意长度的数据,算出的 MD5 值长度都是固定的; 容易计算: ...
  • 就是把任意长度的字节串编程一个一定长的十六进制数字串 特点 1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。 2、容易计算:从原数据计算出MD5值很容易。 3、抗修改性:对原数据进行任何改动,...
  • 这个签名通常用一个十六进制的字符串表示,用来确保消息的完整和一致性,让大容量信息在用数字签名软件签署私人秘钥前被压缩成一种保密的格式(就是把任意长度的字符串变换成一定长的十六进制数字串): 特点 压缩性...
  • 数据加密模块---hashlib

    2018-02-02 15:32:46
    hash:散列,也成称...MD5:128位,因一个十六进制字符占4位,所以最终hexdigest(就转成16进制)生成的是32位的字符串 SHA1:160位,同上,生成40位16进制数(串) SHA256:256位,64位 虽然生成的‘数字指纹’
  • 使用Token请求数据

    2020-12-15 19:04:38
    简单token的组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token的前几位以哈希算法压缩成的一定长度的十六进制字符串。为防止token泄露)。 2.为什么要用Token? Token 完全由应用管理,所
  • 浅谈MD5及简单使用

    千次阅读 2014-08-06 23:17:47
    数据运算为另一固定长度值(十六进制的话:32位),是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。 MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节...
  • 4、MD5加密 MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。 全写: Message Digest Algorithm MD5(中文名为消息...
  • JPEG文件格式简单分析

    2016-12-16 11:39:41
    关键字:十六进制,段格式,编码   一、 JPEG文件格式概述: 图像和动画的存储方式是一个很重要的问题。幸好我们有了数据压缩,有了JPEG等多种压缩存储图像的文件格式,我们今天才能够拿
  • 0989 十进制和十六进制数相互转换的算法 722 0990 十六进制和二进制数相互转换的算法 723 0991 金额大小写转换的算法一 725 0992 金额大小写转换的算法二 730 0993 数字大小写转换的算法 732 20.6 简单...
  • 算法-16-哈夫曼编码

    2021-04-11 21:22:55
    十六、哈夫曼编码(Huffman Coding) 1、概念 它是哈夫曼树(Huffman...定长编码,将信息的原本形式,先转换为字节数组(byte[]),然后再获取每一个字节所对应的二进制(低8位),再进行数据的传输。 变长编码,将信息
  • md5基础知识与Qt中的应用

    千次阅读 2020-08-08 16:54:50
    把一个任意长度的字节串变换成一定长的十六进制数字串 压缩性:  容易计算: 从原数据计算出MD5值很容易。 抗修改性 对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。 强抗碰撞: 已知原...
  • JPEG文件格式简介

    2009-11-09 16:55:00
    为读者进一步进行学习 JPEG 文件压缩做好准备 关键字: 十六进制,段格式,编码 一、 JPEG文件格式概述: 图像和动画的存储方式是一个很重要的问题。幸好我们有了数据压缩,有了 JPEG 等多种压缩存储图像的文件格式...
  • md5

    2015-11-28 11:20:02
    MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、...md5散列一般为32位十六进制数字。MD5算法具有以下特点:1、压缩性:任意长度的...
  • 关键字:十六进制,段格式,编码 一、 JPEG文件格式概述: 图像和动画的存储方式是一个很重要的问题。幸好我们有了数据压缩,有了JPEG等多种压缩存储图像的文件格式,我们今天才能够拿着小小的一个存储器,却存...
  • JPEG图片格式简单分析

    千次阅读 2007-03-26 14:31:00
    为读者进一步进行学习JPEG文件压缩做好准备 关键字:十六进制,段格式,编码 一、 JPEG文件格式概述:图像和动画的存储方式是一个很重要的问题。幸好我们有了数据压缩,有了JPEG等多种压缩存储图像的文

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 129
精华内容 51
关键字:

十六进制数据压缩算法