• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 如何使用ATL中的MD5加密类CCryptMD5Hash

如何使用ATL中的MD5加密类CCryptMD5Hash

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了atl,atl71.dll,atl100.dll下载,atl71.dll修复,穿越火线atl71.dll等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 如何使用ATL中的MD5加密类CCryptMD5Hash
描述:

请提供示例代码,加密一个字符串


解决方案1:


#pragma once
#include <atlcrypt.h>
namespace VCUE
{
   inline HRESULT EnsureAcquire(
         CCryptProv& prov,
         LPCTSTR pszContainer = NULL,
         LPCTSTR pszProvider = MS_DEF_PROV,
         DWORD dwProvType = PROV_RSA_FULL,
         DWORD dwFlags = CRYPT_VERIFYCONTEXT | CRYPT_SILENT
         )
   {
      HRESULT hr = prov.Initialize(dwProvType, pszContainer, 
      pszProvider, dwFlags);
      if (hr == NTE_KEYSET_NOT_DEF)
            hr = prov.Initialize(dwProvType, pszContainer, pszProvider,
                                            dwFlags | CRYPT_NEWKEYSET);
      return hr;
   }
}
EnsureAcquire is a helper function that initializes a cryptographic provider (an object that provides cryptographic functions). The function provides sensible default arguments for use in server applications by setting the flag that disables any user interface that the cryptographic provider might display to the user (CRYPT_SILENT) and the flag that informs the provider that private keys do not need to be accessed (CRYPT_VERIFYCONTEXT). The function also ensures that if initialization fails because the container does not exist, an attempt is made to create it. For more information, see CCryptProv::Initialize. Add the following code to Encrypt.h: 
   inline HRESULT CreateSaltedHash(
            CCryptProv& Provider,
            const BYTE* Secret, DWORD SecretLength,
            const BYTE* Salt, DWORD SaltLength,
            BYTE* Hash,   DWORD& HashLength
         )
   {
      HRESULT hr = E_FAIL;
      HCRYPTHASH hHash = 0;
      if (CryptCreateHash(Provider.GetHandle(), CALG_MD5, 
          0, 0, &hHash))
      {
         CCryptHash oHash(hHash, TRUE);
         hr = oHash.AddData(Secret, SecretLength);
         if (SUCCEEDED(hr))
         {
            hr = oHash.AddData(Salt, SaltLength);
            if (SUCCEEDED(hr))
            {
               DWORD Size = 0;
               hr = oHash.GetSize(&Size);
               if (SUCCEEDED(hr))
               {
                  if (Size <= HashLength)
                     hr = oHash.GetValue(Hash, &HashLength);
                  else
                     hr = E_OUTOFMEMORY;
               }
            }
         }
      }
      return hr;
   }
CreateSaltedHash uses the MD5 hashing algorithm to generate a hash from a secret (such as a password) and a salt (a random number). The code creates a CCryptHash object, adds the secret and the salt to the hash, and then gets the value of the hash if the buffer provided by the caller is big enough to hold it. Add the following code to Encrypt.h: 
   inline HRESULT HashSecret(
            const BYTE* Secret, DWORD SecretLength,
            BYTE* Salt, DWORD& SaltLength,
            BYTE* Hash, DWORD& HashLength
            )
   {
      CCryptProv Provider;
      HRESULT hr = EnsureAcquire(Provider);
      if (SUCCEEDED(hr))
      {
         hr = Provider.GenRandom(SaltLength, Salt);
         if (SUCCEEDED(hr))
         {
 &
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 为什么用向导生成的ATLCOM工程(dll)没有dlldatac文件
  • 关于用ATL开发office插件
  • 疑惑:如何使用通过atl工程编写的类接口
  • ATL怎么实现可变参数的接口?
  • codeproject上的经典代码,ATL做OPENGL控件,为什么不能在VB环境下正常工作,如何改进
  • VC的ATL编COM组件,Com之间调用问题
  • 要用atl写个控件,涉及到界面的,怎么将wtl和atl结合起来用呐?用wtl来做控件的界面
  • ATL实现office插件问题?
  • 谁能帮我看一下关于ATL编写COM组件
  • 在ATL中不能用#import导入excel9olb文件么??

相关文章

  • 2017-06-04 第二次使用ActiveX失败
  • 2017-06-05 关于DLL的相关问题
  • 2017-06-05 如何获得线程状态?
  • 2017-06-05 MFC如何调用EXCEL
  • 2017-06-04 ATL的DHTML控件注删问题。
  • 2017-06-04 怎样使得嵌入WEB页面的OCX控件不被阻止
  • 2017-06-05 线程创建的CDialog无法显示?
  • 2017-06-04 初次接触COM了解不多询问:基于Dialog的程序动态生成浏览器组件并响应事件的问题
  • 2017-06-05 如何取得另外一个进程的数据
  • 2017-06-04 关于IID接口标识的小问题

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • modelessdialog-->dll->exe
    • 多线程的的release版本不能正常运行
    • CSocket的消息响应和多线程编程的一个问题(难者不会,会者不难)
    • 如何添加BEGIN_PROP_MAP和END_PROP_MAP之间的内容呢?有编译错误
    • MFC创建ActiveX控件的属性修改问题
    • 无法注册DLL,在线等待解答,谢谢
    • 各位COM高手,可以到这里来看看小妹的问题哟
    • 把几个函数做成一个dll的问题
    • OCX控件注册的奇怪问题,有点急
    • 不知道该怎么测试这样的ActiveX,求教!

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有