zoukankan      html  css  js  c++  java
  • win api 实现 base64编码、解码

    最近在写小玩意,用到了base64编码,但是考虑到体积大小,网上的多种实现都是利用开源的代码,这就增加了其大小。我想win api能不能实现base64编码、解码。通过一通乱搜,还有收获。就有了以下代码

    #pragma comment(lib,"crypt32.lib")
    
    LPSTR Base64Encode(LPBYTE lpBuffer,DWORD dwLen)
    {
    	DWORD dwNeed;
    	LPSTR lpBase64Str ;
    	DWORD dwIndex ;
    	DWORD dwIndexJ;
    	dwNeed = 0;
    	lpBase64Str = NULL ;
    	
    	CryptBinaryToStringA(lpBuffer,dwLen,CRYPT_STRING_BASE64,NULL,&dwNeed);
    
    	if (dwNeed)
    	{
    		lpBase64Str = (LPSTR)malloc(dwNeed);
    		ZeroMemory(lpBase64Str,dwNeed);
    		CryptBinaryToStringA(lpBuffer,dwLen,CRYPT_STRING_BASE64,lpBase64Str,&dwNeed);
    		dwIndex = 0;
    		while(*(lpBase64Str+dwIndex)!=0)
    		{
    			if (*(lpBase64Str+dwIndex) == 0x0d || *(lpBase64Str+dwIndex)==0x0a)
    			{
    				dwIndexJ = dwIndex +1;
    				
    				while (*(lpBase64Str+dwIndexJ)!=0)
    				{
    					*(lpBase64Str+dwIndexJ-1)= *(lpBase64Str+dwIndexJ);
    					dwIndexJ ++ ;
    				}
    
    				*(lpBase64Str+dwIndexJ-1) = 0 ;
    				
    			}else
    			{
    				dwIndex ++ ;
    			}
    			
    		}
    	}
    
    	return lpBase64Str ;
    }
    
    LPBYTE Base64Decode(LPSTR lpBase64Str,LPDWORD lpdwLen)
    {
    	DWORD dwLen ;
    	DWORD dwNeed ;
    	LPBYTE lpBuffer ;
    
    	dwLen = strlen(lpBase64Str);
    	dwNeed = 0;
    	CryptStringToBinaryA(lpBase64Str,0,CRYPT_STRING_BASE64,NULL,&dwNeed,NULL,NULL);
    	if (dwNeed)
    	{
    		lpBuffer = (LPBYTE)malloc(dwNeed);
    		CryptStringToBinaryA(lpBase64Str,0,CRYPT_STRING_BASE64,lpBuffer,&dwNeed,NULL,NULL);
    		*lpdwLen = dwNeed ;
    	}
    	
    	return lpBuffer ;
    }
    

      仅供参考

    签名档: 从事网络安全和编程的我,很希望能找到志同道合的朋友交流。 欢迎cn博客的好友拍砖,留言。
  • 相关阅读:
    Jar包管理规范
    Base64编码原理与应用
    MySQL 5.7.14安装说明,解决服务无法启动
    idea注册
    Oracle 如何对中文字段进行排序
    SVN错误:Attempted to lock an already-locked dir
    排序算法
    设计模式
    分层
    阿里云
  • 原文地址:https://www.cnblogs.com/M4ster/p/winapi_base64.html
Copyright © 2011-2022 走看看