win api 实现 AES加密、解密
WCHAR szPasswod[] = {L"goodpasswod" };
HCRYPTHASH hHash;
HCRYPTPROV hCryptProv;
HCRYPTKEY hKey;
DWORD dwHashLen = ;
DWORD dwhash = ;
BYTE byHash[] ={""};
BYTE bySrc[] = {""};
BYTE byDest[] = {};
memcpy(byDest,bySrc,);
int iret = - ;
int idx = ;
WCHAR* wszProvider[] = {MS_ENH_RSA_AES_PROV,L"Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)"};
while(!(iret = CryptAcquireContext(&hCryptProv,NULL,wszProvider[idx],PROV_RSA_AES,CRYPT_SILENT)))
{
idx ++ ;
idx %= ;
}
// passwd to hash
CryptCreateHash(hCryptProv,CALG_MD5,,,&hHash);
// use passwd to create hash
//CryptHashData(hHash,(BYTE*)szPasswod,wcslen(szPasswod)*2,0);
// set hash
CryptGetHashParam(hHash,HP_HASHSIZE,(BYTE*)&dwHashLen,&dwhash,); // hashlen = 16
CryptSetHashParam(hHash,HP_HASHVAL ,byHash,dwHashLen);
CryptDeriveKey(hCryptProv,CALG_AES_128,hHash,CRYPT_EXPORTABLE,&hKey); // CRYPT_EXPORTABLE
DWORD dwLen =;
DWORD dwLen1 = ;
DWORD dwBufferLen = ;
//get crypt need buffer-len
CryptEncrypt(hKey,,TRUE,,byDest,&dwLen,);
// alloc buffer that`s len should be dwlen
CryptEncrypt(hKey,,TRUE,,byDest,&dwLen1,dwLen);
MessageBoxA(NULL,(LPSTR)byDest,(LPSTR)byDest,);
CryptDecrypt(hKey,,TRUE,,byDest,&dwLen);
MessageBoxA(NULL,(LPSTR)byDest,(LPSTR)byDest,);
CryptDestroyHash(hHash);
CryptDestroyKey(hKey);
CryptReleaseContext(hCryptProv,);
测试发现兼容 xp,win7(x64)
LPBYTE GetHash(LPBYTE lpData, DWORD dwDataLen,LPDWORD lpdwOutLen)
{
HCRYPTPROV hCryptProv;
HCRYPTHASH hHash;
LPBYTE lpRetBuffer = NULL ; //--------------------------------------------------------------------
// Get a handle to a cryptography provider context. if(CryptAcquireContext(
&hCryptProv,
NULL,
NULL,
PROV_RSA_FULL,
CRYPT_VERIFYCONTEXT))
{
// printf("CryptAcquireContext complete. \n"); //--------------------------------------------------------------------
// Acquire a hash object handle. if(CryptCreateHash(
hCryptProv,
CALG_MD5,
0,
0,
&hHash))
{
if(CryptHashData(hHash,lpData,dwDataLen,0))
{
//CryptGetHashParam(hHash, HP_HASHSIZE, (BYTE*)(&dwSize), &dwLen, 0);
CryptSetHashParam(hHash,HP_HASHSIZE,(BYTE*)lpdwOutLen,sizeof(DWORD)); lpRetBuffer =(LPBYTE) BPP_ReAlloc(NULL,0,*lpdwOutLen);
CryptGetHashParam(hHash, HP_HASHVAL, lpRetBuffer, lpdwOutLen, 0);
} }
} if(hHash)
CryptDestroyHash(hHash);
if(hCryptProv)
CryptReleaseContext(hCryptProv,0); return lpRetBuffer ;
}
LPBYTE Encrypt(LPBYTE lpData,LPDWORD lpdwInOutLen)
{
HCRYPTPROV hCryptProv =NULL ;
HCRYPTKEY hKey = NULL ;
HCRYPTHASH hHash = NULL ; char* szId =NULL ;
LPBYTE lpRetBuf = NULL ;
DWORD dwLen ;
dwLen = *lpdwInOutLen ; if (!CryptAcquireContextW(&hCryptProv,NULL,NULL,PROV_RSA_FULL,0))
{
if (!CryptAcquireContextW(&hCryptProv,NULL,NULL,PROV_RSA_FULL,CRYPT_NEWKEYSET))
{
goto EncryptEnd ;
}
} if (!CryptCreateHash(hCryptProv,CALG_MD5,0,0,&hHash))
{
goto EncryptEnd ;
} szId = GetIdStr(); // pswd if (!CryptHashData(hHash,(BYTE*)szId,strlen(szId),0))
{ goto EncryptEnd ;
} if (!CryptDeriveKey(hCryptProv,CALG_RC4,hHash,0x00800000,&hKey))
{
dwLen = GetLastError();
goto EncryptEnd ;
} // qu jia mi suo xu chang du // dwLen = ((dwLen%8 ?1:0) + dwLen/8)*8 ; lpRetBuf = (LPBYTE)malloc(dwLen);
memcpy(lpRetBuf,lpData,*lpdwInOutLen); if (!CryptEncrypt(hKey,0,TRUE,0,lpRetBuf,lpdwInOutLen,dwLen))
{
goto EncryptEnd ;
} EncryptEnd: if (szId)
{
Free((LPVOID&)szId);
}
if (hHash)
{
CryptDestroyHash(hHash); }
if (hKey)
{
CryptDestroyKey(hKey);
}
if (hCryptProv)
{
CryptReleaseContext(hCryptProv,0);
} return lpRetBuf ;
} LPBYTE Decrypt(LPBYTE lpData,LPDWORD lpdwInOutLen)
{
HCRYPTPROV hCryptProv =NULL ;
HCRYPTKEY hKey = NULL ;
HCRYPTHASH hHash = NULL ; char* szId =NULL ;
LPBYTE lpRetBuf = NULL ;
DWORD dwLen ;
dwLen = *lpdwInOutLen ; if (!CryptAcquireContextW(&hCryptProv,NULL,NULL,PROV_RSA_FULL,0))
{
if (!CryptAcquireContextW(&hCryptProv,NULL,NULL,PROV_RSA_FULL,CRYPT_NEWKEYSET))
{
goto DecryptEnd ;
}
} if (!CryptCreateHash(hCryptProv,CALG_MD5,0,0,&hHash))
{
goto DecryptEnd ;
} szId = GetIdStr(); if (!CryptHashData(hHash,(BYTE*)szId,strlen(szId),0))
{ goto DecryptEnd ;
} if (!CryptDeriveKey(hCryptProv,CALG_RC4,hHash,CRYPT_EXPORTABLE,&hKey))
{
dwLen = GetLastError();
goto DecryptEnd ;
} // qu jia mi suo xu chang du //dwLen = ((dwLen%8 ?1:0) + dwLen/8)*8 ; lpRetBuf = (LPBYTE)malloc(dwLen);
memcpy(lpRetBuf,lpData,*lpdwInOutLen);
//*lpdwInOutLen = dwLen ;
if (!CryptDecrypt(hKey,0,TRUE,0,lpRetBuf,lpdwInOutLen))
{
goto DecryptEnd ;
} DecryptEnd: if (szId)
{
BPP_Free((LPVOID&)szId);
}
if (hHash)
{
CryptDestroyHash(hHash); }
if (hKey)
{
CryptDestroyKey(hKey);
}
if (hCryptProv)
{
CryptReleaseContext(hCryptProv,0);
} return lpRetBuf ;
}
win api 实现 AES加密、解密的更多相关文章
- 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密
你真的了解字典(Dictionary)吗? 从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...
- Aes 加密解密 java加密解密
使用AES加密解密代码详解 首先,如果是使用nodejs + vue 写的前端, 那么你需要npm 加载一个js文件 npm i crypto-js --save --save-exact npm i ...
- 非对称技术栈实现AES加密解密
非对称技术栈实现AES加密解密 正如前面的一篇文章所述,https协议的SSL层是实现在传输层之上,应用层之下,也就是说在应用层上看到的请求还是明码的,对于某些场景下要求这些http请求参数是非可读的 ...
- C#中使用DES和AES加密解密
C#中使用DES和AES加密解密 2008-01-12 09:37 using System;using System.Text;using System.Security.Cryptography; ...
- C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]
原文:http://outofmemory.cn/code-snippet/35524/AES-with-javascript-java-csharp-python-or-php c#里面的AES加密 ...
- ruby AES加密解密
最近和京东合作做一个项目,在接口对接传递参数时,参数需要通过AES加密解密. 本来想到用gem 'aescrypt'处理,但是aescrypt的编码方式用的base64,而京东那边用的是16进制.所以 ...
- openssl与cryptoAPI交互AES加密解密
继上次只有CryptoAPI的加密后,这次要实现openssl的了 动机:利用CryptoAPI制作windows的IE,火狐和chrome加密控件后,这次得加上与android的加密信息交互 先前有 ...
- java使用AES加密解密 AES-128-ECB加密
java使用AES加密解密 AES-128-ECB加密 import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; impo ...
- AES加密解密——AES在JavaWeb项目中前台JS加密,后台Java解密的使用
一:前言 在软件开发中,经常要对数据进行传输,数据在传输的过程中可能被拦截,被监听,所以在传输数据的时候使用数据的原始内容进行传输的话,安全隐患是非常大的.因此就要对需要传输的数据进行在客户端进行加密 ...
随机推荐
- 段落的展开收起(substring的应用)
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- HDU 5762
Teacher Bo Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Tot ...
- hdu 小希的迷宫
真是被这道并查集的水题给坑哭了...忘记给uset数组初始化我也是醉了. 题目意思是找到判断是不是连通无环的图,首先想到的就是并查集. 1判断成环的时候,只要判断输入边的两个点.有一个共同的父节点,那 ...
- window dos命名
dos命令从c盘进入d盘c:\>d:敲回车 >dir 查看文件夹中文件运行java程序,最好先进入文件夹:然后javac Hello.javajava Hello
- cms修改后台目录
if (!_dirName.Equals("manage")) { if (PageType.IndexOf(_dirName) != -1) { PageType = PageT ...
- python的内存管理机制
先从较浅的层面来说,Python的内存管理机制可以从三个方面来讲 (1)垃圾回收 (2)引用计数 (3)内存池机制 一.垃圾回收: python不像C++,Java等语言一样,他们可以不用事先声明变量 ...
- 利用box-flex实现 dom元素位置页面底部
问题: 总是有这样的需求,就是页面上某部分要位于页面的最底部,此“最底部”要求:(1)当页面上内容不足一屏的时候,在最底部显示(2)当页面上内容不止一屏的时候,也就是有垂直滚动条的时候,要在内容的最后 ...
- EmguCV 阈值化
一.public static double cvThreshold( IntPtr src, IntPtr dst, double threshold, double maxValue, //Max ...
- python随机服务器的双线出口ip发送邮件
#-*- coding:utf-8 -*-import smtplibimport sysimport random import socketfrom email.mime.text import ...
- [LeetCode]题解(python):119 Pascal's Triangle II
题目来源 https://leetcode.com/problems/pascals-triangle-ii/ Given an index k, return the kth row of the ...