c语言写个编码,c语言实现qp编解码

最近研究邮件透明加密技术,用到了qp编码,但是c库中有没有代码。于是按照rfc,使用c语言编写qp的编解码。这里关于邮件透明加密技术,推荐天御云安的隐密邮,部署简单,不影响用户使用习惯,非常好的一款产品。网址:

void DecodeQP(ngx_str_t *dest,ngx_str_t *src)

{

ngx_str_t srcStr;

ngx_str_t destStr;

srcStr.data = src->data;

srcStr.len = 0;

destStr.data = dest->data;

destStr.len = 0;

while (srcStr.len len)

{

if (ngx_strncmp(srcStr.data,"=\r\n", 3) == 0) //软回车,跳过

{

srcStr.data += 3;

srcStr.len += 3;

}

else

{

if (*(srcStr.data) == '=') //是编码字节

{

sscanf((const char *)(srcStr.data),"=hhX",destStr.data);

destStr.data++;

}

else //非编码字节

{

*(destStr.data)++ = *(srcStr.data)++;

srcStr.len++;

}

destStr.len++;

}

}

dest->len = destStr.len;

return;

}

void EncodeQP(ngx_str_t *dest,ngx_str_t *src, ngx_int_t nMaxLineLen)

{

ngx_int_t nDstLen;

ngx_int_t nLineLen; //输出的行长度计数

nDstLen = 0;

nLineLen = 0;

size_t i = 0;

srcStr.len = src->len;

for(i = 0; i len; i++, srcStr.data++){

// ASCII 33-60, 62-126原样输出,其余的需编码

if ((*(srcStr.data) >= '!') && (*(srcStr.data) <= '~') && (*(srcStr.data) != '=')){

*destStr.data++ = *srcStr.data;

nDstLen++;

nLineLen++;

}

else

{

sprintf((char *)destStr.data, "=hhX", *srcStr.data);

destStr.data += 3;

nDstLen += 3;

nLineLen += 3;

}

//输出换行,不算\r\n最多每行nMaxLineLen个字节

if (nLineLen>= nMaxLineLen - 3)

{

sprintf((char *)destStr.data,"=\r\n");

}

}

dest->len = nDstLen;

return ;

}

关键词:c语言 qp编码 透明加密

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值