Guardianship的文章

  • 基于Crypto++计算数据或文件的CRC32值

    背景写了一个基于Crypto++加密库中实现计算文件和数据的CRC32值的一个小程序,Crypto++加密库就不详细介绍了,这个库提供了很多知名的加解密算法,直接调用就好了,使用起来还是比较方便的。
    写这篇文章,就是分享自己的学习心得。自己的密码学部分的知识学得不怎么好,还好有Crypto++开源库可以使用,弥补了对加解密部分的不足。现在,向大家分享使用Crypto++中的CRC32模块实现文件和数据的CRC32值计算方法。
    程序编译设置注意事项首先,先要下载Crypto++库的开源代码,然后,自己编译得到Crypto++的库文件。下载链接还有具体的编译步骤,可以参考我分享文章 “使用VS2013编译Crypto++加密库“,里面有详细介绍。
    在导入Crypto++的库文件到自己的工程项目的时候,要对自己的工程项目进行编译设置。主要一点就是:项目工程的属性中的“运行库”设置,要与编译Crypto++的库文件时设置的“运行库”选项要对应一致,否则程序会编译不过的。也就是要检查LIB库工程和本测试工程的:属性 —> C/C++ —> 代码生成 —> 运行库 是否统一。
    如果编译出错,报告XX重复定义等错误,同样,要检查LIB库工程和本测试工程的:属性 —> C/C++ —> 代码生成 —> 运行库 是否统一。
    实现原理计算文件和数据的CRC32值,它们的实现核心代码为:
    FileSource(pszFileName, true, new HashFilter(crc32, new HexEncoder(new StringSink(value))));
    StringSource(pData, dwDataSize, true, new HashFilter(crc32, new HexEncoder(new StringSink(value))));
    这两行代码总共用了4个类 StringSink、HexEncoder、HashFilter、FileSource 和 StringSource。而且,这两行代码的主要区别就是 FileSource 和 StringSource 的区别。FileSource 的第一个参数只需要传入文件路径名称即可,而 StringSource 第一第二个参数分别表示数据首地址指针和数据大小。
    其它参数表示的意义都是相同的,首先用类 StringSink 添加到一个 string 对象缓冲区,接着用类 HexEncoder 把这个缓冲区转换为 16 进制。其中,计算 Hash 值主要用到类 HashFilter。FileSource 类是把要计算 Hash 值的文件 filename 进行一定的转换放入临时缓冲区,然后调用实例化的 HashFilter 对其进行计算相应 Hash 函数的Hash值,并把 Hash 值返回到缓冲区中。而 StringSource 类是把要计算 Hash 值的数据直接传递给 HashFilter,然后调用实例化的 HashFilter 对其进行计算相应 Hash 函数的Hash值,并把 Hash 值返回到缓冲区中。
    编码实现计算文件的CRC32// 计算文件的 CRC32 值string CalCRC32_ByFile(char *pszFileName){ string value; CRC32 crc32; FileSource(pszFileName, true, new HashFilter(crc32, new HexEncoder(new StringSink(value)))); return value;}
    计算数据的CRC32// 计算数据的 CRC32 值string CalCRC32_ByMem(PBYTE pData, DWORD dwDataSize){ string value; CRC32 crc32; StringSource(pData, dwDataSize, true, new HashFilter(crc32, new HexEncoder(new StringSink(value)))); return value;}
    程序测试我们运行程序,分别使用文件和数据两种方式来计算 520.exe 的 CRC32 值,结果两个值都相同:

    总结这个程序不是很复杂,使用起来比较简单。大家在使用的过程中,注意区分下文件的计算和数据的计算之间的差别即可。
    参考参考自《Windows黑客编程技术详解》一书
    1  留言 2019-01-15 10:48:58
  • 基于Crypto++计算数据或文件的SHA256值

    背景写了一个基于Crypto++加密库中实现计算文件和数据的SHA256值的一个小程序,Crypto++加密库就不详细介绍了,这个库提供了很多知名的加解密算法,直接调用就好了,使用起来还是比较方便的。
    写这篇文章,就是分享自己的学习心得。自己的密码学部分的知识学得不怎么好,还好有Crypto++开源库可以使用,弥补了对加解密部分的不足。现在,向大家分享使用Crypto++中的SHA256模块实现文件和数据的SHA256值计算方法。
    程序编译设置注意事项首先,先要下载Crypto++库的开源代码,然后,自己编译得到Crypto++的库文件。下载链接还有具体的编译步骤,可以参考分享文章 “使用VS2013编译Crypto++加密库“,里面有详细介绍。
    在导入Crypto++的库文件到自己的工程项目的时候,要对自己的工程项目进行编译设置。主要一点就是:项目工程的属性中的“运行库”设置,要与编译Crypto++的库文件时设置的“运行库”选项要对应一致,否则程序会编译不过的。也就是要检查LIB库工程和本测试工程的:属性 —> C/C++ —> 代码生成 —> 运行库 是否统一。
    如果编译出错,报告XX重复定义等错误,同样,要检查LIB库工程和本测试工程的:属性 —> C/C++ —> 代码生成 —> 运行库 是否统一。
    实现原理计算文件和数据的SHA256值,它们的实现核心代码为:
    FileSource(pszFileName, true, new HashFilter(sha256, new HexEncoder(new StringSink(value))));
    StringSource(pData, dwDataSize, true, new HashFilter(sha256, new HexEncoder(new StringSink(value))));
    这两行代码总共用了4个类 StringSink、HexEncoder、HashFilter、FileSource 和 StringSource。而且,这两行代码的主要区别就是 FileSource 和 StringSource 的区别。FileSource 的第一个参数只需要传入文件路径名称即可,而 StringSource 第一第二个参数分别表示数据首地址指针和数据大小。
    其它参数表示的意义都是相同的,首先用类 StringSink 添加到一个 string 对象缓冲区,接着用类 HexEncoder 把这个缓冲区转换为 16 进制。其中,计算 Hash 值主要用到类 HashFilter。FileSource 类是把要计算 Hash 值的文件 filename 进行一定的转换放入临时缓冲区,然后调用实例化的 HashFilter 对其进行计算相应 Hash 函数的 Hash值,并把 Hash 值返回到缓冲区中。而 StringSource 类是把要计算 Hash 值的数据直接传递给 HashFilter,然后调用实例化的 HashFilter 对其进行计算相应 Hash 函数的Hash值,并把 Hash 值返回到缓冲区中。
    编码实现计算文件的SHA256// 计算文件的 SHA256 值string CalSHA256_ByFile(char *pszFileName){ string value; SHA256 sha256; FileSource(pszFileName, true, new HashFilter(sha256, new HexEncoder(new StringSink(value)))); return value;}
    计算数据的SHA256// 计算数据的 SHA256 值string CalSHA256_ByMem(PBYTE pData, DWORD dwDataSize){ string value; SHA256 sha256; StringSource(pData, dwDataSize, true, new HashFilter(sha256, new HexEncoder(new StringSink(value)))); return value;}
    程序测试我们运行程序,分别使用文件和数据两种方式来计算 520.exe 的 SHA256 值,结果两个值都相同:

    总结这个程序不是很复杂,使用起来比较简单。大家在使用的过程中,注意区分下文件的计算和数据的计算之间的差别即可。
    参考参考自《Windows黑客编程技术详解》一书
    2  留言 2019-01-14 17:16:44
  • 基于Crypto++计算数据或文件的SHA1值

    背景写了一个基于Crypto++加密库中实现计算文件和数据的SHA1值的一个小程序,Crypto++加密库就不详细介绍了,这个库提供了很多知名的加解密算法,直接调用就好了,使用起来还是比较方便的。
    写这篇文章,就是分享自己的学习心得。自己的密码学部分的知识学得不怎么好,还好有Crypto++开源库可以使用,弥补了对加解密部分的不足。现在,向大家分享使用Crypto++中的SHA1模块实现文件和数据的SHA1值计算方法。
    程序编译设置注意事项首先,先要下载Crypto++库的开源代码,然后,自己编译得到Crypto++的库文件。下载链接还有具体的编译步骤,可以参考分享文章 “使用VS2013编译Crypto++加密库“,里面有详细介绍。
    在导入Crypto++的库文件到自己的工程项目的时候,要对自己的工程项目进行编译设置。主要一点就是:项目工程的属性中的“运行库”设置,要与编译Crypto++的库文件时设置的“运行库”选项要对应一致,否则程序会编译不过的。也就是要检查LIB库工程和本测试工程的:属性 —> C/C++ —> 代码生成 —> 运行库 是否统一。
    如果编译出错,报告XX重复定义等错误,同样,要检查LIB库工程和本测试工程的:属性 —> C/C++ —> 代码生成 —> 运行库 是否统一。
    实现原理计算文件和数据的SHA1值,它们的实现核心代码为:
    FileSource(pszFileName, true, new HashFilter(sha1, new HexEncoder(new StringSink(value))));
    StringSource(pData, dwDataSize, true, new HashFilter(sha1, new HexEncoder(new StringSink(value))));
    这两行代码总共用了4个类 StringSink、HexEncoder、HashFilter、FileSource 和 StringSource。而且,这两行代码的主要区别就是 FileSource 和 StringSource 的区别。FileSource 的第一个参数只需要传入文件路径名称即可,而 StringSource 第一第二个参数分别表示数据首地址指针和数据大小。
    其它参数表示的意义都是相同的,首先用类 StringSink 添加到一个 string 对象缓冲区,接着用类 HexEncoder 把这个缓冲区转换为 16 进制。其中,计算 Hash 值主要用到类 HashFilter。FileSource 类是把要计算 Hash 值的文件 filename 进行一定的转换放入临时缓冲区,然后调用实例化的 HashFilter 对其进行计算相应 Hash 函数的Hash值,并把 Hash 值返回到缓冲区中。而 StringSource 类是把要计算 Hash 值的数据直接传递给 HashFilter,然后调用实例化的 HashFilter 对其进行计算相应 Hash 函数的Hash值,并把 Hash 值返回到缓冲区中。
    编码实现计算文件的SHA1// 计算文件的 SHA1 值string CalSHA1_ByFile(char *pszFileName){ string value; SHA1 sha1; FileSource(pszFileName, true, new HashFilter(sha1, new HexEncoder(new StringSink(value)))); return value;}
    计算数据的SHA1// 计算数据的 SHA1 值string CalSHA1_ByMem(PBYTE pData, DWORD dwDataSize){ string value; SHA1 sha1; StringSource(pData, dwDataSize, true, new HashFilter(sha1, new HexEncoder(new StringSink(value)))); return value;}
    程序测试我们运行程序,分别使用文件和数据两种方式来计算 520.exe 的 SHA1 值,结果两个值都相同:

    总结这个程序不是很复杂,使用起来比较简单。大家在使用的过程中,注意区分下文件的计算和数据的计算之间的差别即可。
    参考参考自《Windows黑客编程技术详解》一书
    1  留言 2019-01-13 09:41:27
  • 基于Crypto++计算数据或文件的MD5值

    背景写了一个基于Crypto++加密库中实现计算文件和数据的MD5值的一个小程序,Crypto++加密库就不详细介绍了,这个库提供了很多知名的加解密算法,直接调用就好了,使用起来还是比较方便的。
    写这篇文章,就是分享自己的学习心得。自己的密码学部分的知识学得不怎么好,还好有Crypto++开源库可以使用,弥补了对加解密部分的不足。现在,向大家分享使用Crypto++中的MD5模块实现文件和数据的MD5值计算方法。
    程序编译设置注意事项首先,先要下载Crypto++库的开源代码,然后,自己编译得到Crypto++的库文件。下载链接还有具体的编译步骤,可以参考这篇分享文章 “使用VS2013编译Crypto++加密库”,里面有详细介绍。
    在导入Crypto++的库文件到自己的工程项目的时候,要对自己的工程项目进行编译设置。主要一点就是:项目工程的属性中的“运行库”设置,要与编译Crypto++的库文件时设置的“运行库”选项要对应一致,否则程序会编译不过的。也就是要检查LIB库工程和本测试工程的:属性 —> C/C++ —> 代码生成 —> 运行库 是否统一。
    如果编译出错,报告XX重复定义等错误,同样,要检查LIB库工程和本测试工程的:属性 —> C/C++ —> 代码生成 —> 运行库 是否统一。
    实现原理计算文件和数据的MD5值,它们的实现核心代码为:
    FileSource(pszFileName, true, new HashFilter(md5, new HexEncoder(new StringSink(value))));
    StringSource(pData, dwDataSize, true, new HashFilter(md5, new HexEncoder(new StringSink(value))));
    这两行代码总共用了4个类 StringSink、HexEncoder、HashFilter、FileSource 和 StringSource。而且,这两行代码的主要区别就是 FileSource 和 StringSource 的区别。FileSource 的第一个参数只需要传入文件路径名称即可,而 StringSource 第一第二个参数分别表示数据首地址指针和数据大小。
    其它参数表示的意义都是相同的,首先用类 StringSink 添加到一个 string 对象缓冲区,接着用类 HexEncoder 把这个缓冲区转换为 16 进制。其中,计算 Hash 值主要用到类 HashFilter。FileSource 类是把要计算 Hash 值的文件 filename 进行一定的转换放入临时缓冲区,然后调用实例化的 HashFilter 对其进行计算相应 Hash 函数的Hash值,并把 Hash 值返回到缓冲区中。而 StringSource 类是把要计算 Hash 值的数据直接传递给 HashFilter,然后调用实例化的 HashFilter 对其进行计算相应 Hash 函数的Hash值,并把 Hash 值返回到缓冲区中。
    编码实现计算文件的MD5// 计算文件的 MD5 值string CalMD5_ByFile(char *pszFileName){ string value; MD5 md5; FileSource(pszFileName, true, new HashFilter(md5, new HexEncoder(new StringSink(value)))); return value;}
    计算数据的MD5// 计算数据的 MD5 值string CalMD5_ByMem(PBYTE pData, DWORD dwDataSize){ string value; MD5 md5; StringSource(pData, dwDataSize, true, new HashFilter(md5, new HexEncoder(new StringSink(value)))); return value;}
    程序测试我们运行程序,分别使用文件和数据两种方式来计算 520.exe 的 MD5 值,结果两个值都相同:

    总结这个程序不是很复杂,使用起来比较简单。大家在使用的过程中,注意区分下文件的计算和数据的计算之间的差别即可。
    参考参考自《Windows黑客编程技术详解》一书
    1  留言 2019-01-11 11:00:45
eject