VC++ 字符串String MD5计算小工具 VS2008工程

基于字符串加密的MD5算法,VS2008 VC++,多字节编译工程。主要代码如下,实现了ANSI字符串加密与Unicode字符串加密。

运行效果如下:

核心代码:

void CEncryptByMd5Dlg::OnButtonOk()
{
  // TODO: Add your control notification handler code here
  UpdateData(true);
  unsigned int len=0;
  char *cTemp =NULL;
  if(m_bType==0)
  {
    len=m_sText.GetLength();
    cTemp=(char*)(LPCTSTR)m_sText;
  }
  else
  {
    len=CStringW(m_sText).GetLength()*2;
    cTemp=(char*)ANSI2UNICODE(m_sText);
  }
  char *cIdentity;
  CMd5A md5;
  cIdentity = md5.MDString(cTemp,len);
  m_sEncrypt = CString(cIdentity);
  if(m_bUpper==TRUE)
  {
    m_sEncrypt.MakeUpper();
  }
  else
  {
    m_sEncrypt.MakeLower();
  }
  UpdateData(false);
} 

void CEncryptByMd5Dlg::OnBnClickedBtnCompare()
{
  // TODO: Add your control notification handler code here
  UpdateData(true);
  if(m_sEncrypt==m_szMD5_2)
  {
    MessageBox(_T("密文比较结果相同!"),_T("比较相同"),MB_OK|MB_ICONINFORMATION);
  }
  else
  {
    MessageBox(_T("密文比较结果失败!"),_T("比较不同"),MB_OK|MB_ICONERROR);
  }
  UpdateData(FALSE);
} 

void CEncryptByMd5Dlg::OnEnChangeEdit1()
{
  // TODO: If this is a RICHEDIT control, the control will not
  // send this notification unless you override the CDialog::OnInitDialog()
  // function and call CRichEditCtrl().SetEventMask()
  // with the ENM_CHANGE flag ORed into the mask.
  OnButtonOk();
  // TODO: Add your control notification handler code here
} 

char * CEncryptByMd5Dlg::Unicode2ANSI(CString strSource)
{
  if (strSource.IsEmpty()) return NULL;
  char *pBuffer = NULL;
  int nBufferSize = 0;
#ifdef _UNICODE
  nBufferSize = WideCharToMultiByte(CP_ACP, 0, (LPCTSTR)strSource, -1, NULL, 0, NULL, NULL) + 1;
  pBuffer = new char[nBufferSize];
  memset(pBuffer, 0, sizeof(char)*nBufferSize); 

  WideCharToMultiByte(CP_ACP, 0, (LPCTSTR)strSource, -1, pBuffer, nBufferSize, NULL, NULL);
#else
  nBufferSize = strSource.GetLength() + 1;
  pBuffer = new char[nBufferSize];
  memset(pBuffer, 0, sizeof(char)*nBufferSize); 

  strcpy_s(pBuffer, nBufferSize, (LPCTSTR)strSource);
#endif
  return pBuffer;
} 

wchar_t * CEncryptByMd5Dlg::ANSI2UNICODE(CString pData)
{
  int nLength = MultiByteToWideChar(CP_ACP, 0, pData, -1, NULL, 0);
  wchar_t *pwBuffer = new wchar_t[nLength + 1];
  memset(pwBuffer, 0, sizeof(wchar_t)*(nLength + 1));
  MultiByteToWideChar(CP_ACP, 0, pData, -1, pwBuffer, nLength);
  return pwBuffer;
} 

void CEncryptByMd5Dlg::OnBnClickedCheckUpper()
{
  OnButtonOk();
  // TODO: Add your control notification handler code here
} 

void CEncryptByMd5Dlg::OnBnClickedRadio1()
{
  OnButtonOk();
  // TODO: Add your control notification handler code here
} 

void CEncryptByMd5Dlg::OnBnClickedRadio2()
{
  OnButtonOk();
  // TODO: Add your control notification handler code here
}

VS2008 MFC工程源码下载:点击打开链接

(0)

相关推荐

  • 详解NSString 与C++ string字符串的互转

    NSString 与C++ string字符串的互转实例详解 1.  string 转换为 NSString std::string str("hello"); NSString *str=[NSString stringWithString:str.c_str()]; NSString *istr=[NSString stringWithString:@"zsh"]; str=[istr cStringUsingEncoding: NSUTF8StringEnco

  • c++中数字与字符串之间的转换方法(推荐)

    1.字符串数字之间的转换 (1)string --> char * string str("OK"); char * p = str.c_str(); (2)char * -->string char *p = "OK"; string str(p); (3)char * -->CString char *p ="OK"; CString m_Str(p); //或者 CString m_Str; m_Str.Format(&q

  • 详解C++中十六进制字符串转数字(数值)

    详解C++中十六进制字符串转数字(数值) 主要有两个方法,其实都是对现有函数的使用: 方法1: sscanf()   函数名: sscanf 功  能: 从字符串格式化输入 用  法: int sscanf(char *string, char *format[,argument,...]); 以上的 format 为 %x 就是将字符串格式化为 16 进制数 例子:  #include <stdio.h> void main() { char* p = "0x1a"; i

  • C++ 中字符串操作--宽窄字符转换的实例详解

    C++ 中字符串操作--宽窄字符转换的实例详解 MultiByteToWideChar int MultiByteToWideChar( _In_ UINT CodePage, _In_ DWORD dwFlags, _In_ LPCSTR lpMultiByteStr, _In_ int cbMultiByte, _Out_opt_ LPWSTR lpWideCharStr, _In_ int cchWideChar ); 参数描述: CodePage:常用CP_ACP.CP_UTF8 dwF

  • C++/C 回文字符串的实例详解

    C++/C回文字符串的实例详解 判断输入的字符串是不是回文字符串,正反读一样. .C版 #include<stdio.h> int main() { char he[100]; char a; int i=0,flag=1; while((a=getchar())!='\n') { he[i]=a; i++; } int n=i; for(i=0;i<n/2;i++) { printf("%c\t%c\n",he[i],he[n-1-i]); if(he[i]!=he

  • C++ string 字符串查找匹配实例代码

    在写C++程序中,总会遇到要从一个字符串中查找一小段子字符串的情况,对于在C中,我们经常用到strstr()或者strchr()这两种方法.而对于C++的string,我们往往会用到find(). C++:#inlcude<string> C: #include<string.h> find():在一个字符串中查找一个指定的单个字符或字符数组.如果找到,就返回首次匹配的开始位置:如果没有查找到匹配的内容,就返回string::npos. find_first_of():在一个目标串

  • C/C++ 实现递归和栈逆序字符串的实例

    C/C++ 实现递归和栈逆序字符串的实例 递归函数调用模型 逆序方法 void revers(char *buf){ char *p = buf; if (p == NULL) { return; } //递归结束条件 if (*p == '\0') { return; } //递归调用 revers(p + 1); //在字符串的结尾追加n个字符 strncat(buf_g, p, 1); } 调用 int main(int argc, const char * argv[]) { char

  • C++中输出十六进制形式的字符串

    前言 在进行 i18n 相关的开发时,经常遇到字符编码转换的错误.这时如果能把相关字符串用十六进制的形式打印出来,例如,"abc" 输出成 "\\x61\\x62\\x63" 这对于 i18n 的除错来说是很有帮助的.Python 里面,只需要使用 repr() 函数就行了.可在 C++ 中如何做到这点呢? 下面是用 ostream 的格式化功能的一个简单的实现: std::string get_raw_string(std::string const& s

  • C++中带空格字符串的输入问题解决

    前言 字符串一直是一个重点加难点,很多笔试面试都会涉及,带空格的字符串更是十分常见,现在对字符串的输入问题进行一下总结. C++用cin输入的时候会忽略空格以后的字符,比如 char a[100]; cin>>a; C++用cin输入的时候会忽略空格以后的字符,输入"hello world"输出的是"hello": 如果用循环输入 for(int i=0;i<100;i++) { cin>>a[i]; } 这样输入100个数吗?或者定义

  • VC++ 字符串String MD5计算小工具 VS2008工程

    基于字符串加密的MD5算法,VS2008 VC++,多字节编译工程.主要代码如下,实现了ANSI字符串加密与Unicode字符串加密. 运行效果如下: 核心代码: void CEncryptByMd5Dlg::OnButtonOk() { // TODO: Add your control notification handler code here UpdateData(true); unsigned int len=0; char *cTemp =NULL; if(m_bType==0) {

  • php常用字符串String函数实例总结【转换,替换,计算,截取,加密】

    本文实例总结了php常用字符串String函数.分享给大家供大家参考,具体如下: nl2br 功能:化换行符为<br> <?php $str = "cat isn't \n dog"; $result = nl2br($str); echo $result; /**结果 cat isn't dog */ rtrim 功能:清除右边的空白 <?php $str = "Hello world "; echo strlen($str)."

  • C# 字符串处理小工具

    之前刚上大学时沉迷于安全方面,当时一直想写一个处理字符串的小程序. 无奈当时没有太多时间,一直拖延到这寒假. 寒假闲来无事,所以就写写小程序来练手,顺便复习一下窗体和基础. 实现的功能有以下: 转换为大写 转换为小写 反转字符串 匹配某字符串出现次数 正则匹配 base64加密 base64解密 ROT13加密解密 MD5 32位加密 程序还是非常简陋的,没有健壮性,也没有输入的校验. 用心创造BUG(比心 还有请不要吐槽我的变量命名以及方法命名,如果你不是从小学开始学拼音肯定看不懂:) 因为一

  • C#中把字符串String转换为整型Int的小例子

    本文介绍如何在使用C#开发程序时,将一个字符串String变量的值转换为一个整型Int变量. 比如,我们在C#中定义一个字符串变量,用它来获取一个xml中的值.小编这里并不是故意要用一个字符串去获取xml节点的值,而是使用InnerText的方式获取的值必须是字符串String类型的. 复制代码 代码如下: string tmpValue = ""; tmpValue = xml.DocumentElement["expirydays"].InnerText.Tri

  • Python制作简易版小工具之计算天数的实现思路

    需求 给定一个日期,格式如 "2020-2-12",计算出这个日期是 2020 年的第几天? 实现思路 使用 tkinter 和 tkinter.ttk 对界面进行布置: 使用 calendar 计算天数: 规范输入日期的格式: 对月份,天数进行逻辑判断: 输入错误抛出异常提示. 代码实现 # -*- coding: utf-8 -*- ''' @File: calc_day_v2.py @Time: 2020/02/12 20:33:22 @Author: 大梦三千秋 @Contac

  • 详解python实现可视化的MD5、sha256哈希加密小工具

    本文主要介绍了详解python实现可视化的MD5.sha256哈希加密小工具,分享给大家,具体如下: 效果图: 刚启动的状态 输入文本.触发加密按钮后支持复制 超过十条不全量显示 代码 import hashlib import tkinter as tk #窗口控制 windowss=tk.Tk() windowss.title('Python_md5')#窗口title,并非第一行 windowss.geometry('820x550') windowss.resizable(width=T

  • PHP实现的各种进制相互转换功能小工具示例

    本文实例讲述了PHP实现的各种进制相互转换功能小工具.分享给大家供大家参考,具体如下: <html> <head> <title>进制转换器</title> <?php $n1=$n2=""; if($_POST){ $n1=$_POST['n1']; $trans=$_POST['trans']; if($trans=='1'){ $n2=decbin((int)$n1); }elseif($trans=='2'){ $n2=de

  • 基于Python制作一个文件去重小工具

    目录 前言 实现步骤 补充 前言 常常在下载网络素材时有很多的重复文件乱七八糟的,于是想实现一个去重的操作. 主要实现思路就是遍历出某个文件夹包括其子文件夹下面的所有文件,最后,将所有文件通过MD5函数的对比筛选出来,最后将重复的文件移除. 实现步骤 用到的第三方库都比较的常见,其中只有hashlib是用来对比文件的不是很常见.其他的都是一些比较常见的第三方库用来做辅助操作. import os # 应用文件操作 import hashlib # 文件对比操作 import logging #

  • 浅谈常用字符串与集合类转换的工具类

    在项目中,我们经常需要把接收到的字符串转换成对应的集合类保存,或者把集合类转换成字符串以方便传输,这个工具类中封装了几个常用的方法,对于这种转换需求十分方便. import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Properties; import java.u

  • Python 实现一个颜色色值转换的小工具

    需求说明 公司的 UI 设计小哥,已经转用 Zeplin 很久了.Zeplin 的设计稿展示页面的颜色色值使用十进制的 RGB 表示的,在 Android 中的颜色表示大多情况下都需要十六进制的 RGB 表示.我的数学没有好到直接看到十进制就可以心算得到十六进制的结果,所以我需要一个工具,输入十进制的 RGB ,得到十六进制的色值,最好可以方便复制. Zeplin 的颜色色值显示示例 原有处理方式 因为我会 Python (仅限于终端输入 python 然后当做计算器算,或者用 hex() 函数

随机推荐