win api 实现 base64编码、解码
最近在写小玩意,用到了base64编码,但是考虑到体积大小,网上的多种实现都是利用开源的代码,这就增加了其大小。我想win api能不能实现base64编码、解码。通过一通乱搜,还有收获。就有了以下代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | #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博客的好友拍砖,留言。
标签:
winapi_base64
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】