Base64算法C语言实现

本文详细介绍了如何使用Base64算法对指定明文进行加密,并通过头文件和函数声明展示了实现过程。包括参数说明、函数实现以及内存操作等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用说明:

XSXSXSblubro.comSXSXSX

1.将红色字体内容复制到主函数前

2.将绿色字体内容复制到主函数之后

参数说明

1.pClerText指向需要加密的明文

2.ClerTextLen明文的长度(单位字节)

3.ppCipherText用于存放密文的地址

4.pCipherTextLen用于存放密文长度的地址

//头文件及函数声明

#include <stdlib.h> 
#include <malloc.h> 
#include <memory.h>

unsigned int Base64Encrypt(unsigned char *pClerText,unsigned int ClerTextLen,unsigned char **ppCipherText,unsigned int *pCipherTextLen);

//函数实现

unsigned int Base64Encrypt ( unsigned char *pClerText,unsigned int ClerTextLen,unsigned char **ppCipherText,unsigned int *pCipherTextLen ) 
{ 
   unsigned char Base64Table[64]={65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90, 
                                  97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122, 
                                  48,49,50,51,52,53,54,55,56,57, 
                                  43,47};

   unsigned int ClerTextBytes,LoopA;

   unsigned char *pClerTextBytes=(unsigned char *)&ClerTextBytes; 
   
   unsigned char *pCipherText;

   unsigned int CipherTextLen, EquaSignCount,Remainder;

   Remainder=ClerTextLen%3;

   if(Remainder==0) 
   { 
      CipherTextLen=ClerTextLen/3*4;

      EquaSignCount=0;

   } 
   else 
   { 
      CipherTextLen=(ClerTextLen-Remainder)/3*4+4;

      if(Remainder==1)

        EquaSignCount=2;

      else

        EquaSignCount=1; 
   } 
   pCipherText=(unsigned char *)malloc(CipherTextLen);

   if(pCipherText==NULL) return 1;

   memset((void *)pCipherText,0,CipherTextLen);

   for(LoopA=0;LoopA<(CipherTextLen/4);LoopA++) 
   { 
      pClerTextBytes[3]=pClerText[LoopA*3];

      if(LoopA*3+1>=ClerTextLen)

        pClerTextBytes[2]=0;

      else

        pClerTextBytes[2]=pClerText[LoopA*3+1];

      if(LoopA*3+2>=ClerTextLen)

        pClerTextBytes[1]=0;

      else

        pClerTextBytes[1]=pClerText[LoopA*3+2];

      pClerTextBytes[0]=0;

      ClerTextBytes=ClerTextBytes>>2;

      pCipherText[LoopA*4]=pClerTextBytes[3];

      ClerTextBytes=ClerTextBytes>>2;

      pCipherText[LoopA*4+1]=pClerTextBytes[2]&63;

      ClerTextBytes=ClerTextBytes>>2;

      pCipherText[LoopA*4+2]=pClerTextBytes[1]&63; 
      
      ClerTextBytes=ClerTextBytes>>2;

      pCipherText[LoopA*4+3]=pClerTextBytes[0]&63;

   } 
   for(LoopA=0;LoopA<CipherTextLen;LoopA++) 
   { 
      pCipherText[LoopA]=Base64Table[pCipherText[LoopA]]; 
   } 
   if(EquaSignCount==1) 
   { 
      pCipherText[CipherTextLen-1]=61; 
   } 
   if(EquaSignCount==2) 
   { 
      pCipherText[CipherTextLen-2]=61;

      pCipherText[CipherTextLen-1]=61; 
   } 
   *ppCipherText=pCipherText;

   *pCipherTextLen=CipherTextLen;

   return 0; 
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值