美文网首页
c语言实现qp的编码和解码

c语言实现qp的编码和解码

作者: rain99_0550 | 来源:发表于2019-04-19 16:46 被阅读0次

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

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 < src->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++;

                srcStr.data += 3;

                srcStr.len += 3;

            }

            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_str_t srcStr;

    ngx_str_t destStr;

    ngx_int_t nDstLen;

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

    nDstLen = 0;

    nLineLen = 0;

    size_t i = 0;

    srcStr.data = src->data;

    srcStr.len = src->len;

    destStr.data = dest->data;

    destStr.len = 0;

    for(i = 0; i < src->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");

            destStr.data += 3;

            nDstLen += 3;

            nLineLen = 0;

        }

    }

    dest->len = nDstLen;

    return ;

}

关键字:qp  qouted-printable 邮件安全 透明加密

相关文章

  • c语言实现qp的编码和解码

    最近研究邮件透明加密技术,用到了qp编码,但是c库中有没有代码。于是按照rfc,使用c语言编写qp的编解码。这里关...

  • FFmpeg AAC编码实战

    一、FFmpeg 命令行实现 AAC 编码 1.1、基本使用: -c:a 设置音频编码器,c表示codec(编解码...

  • Geohash 编码解码 C 语言实现

    本文来自我的个人博客:https://zetaoyang.github.io 什么是 Geohash Geohas...

  • 一个用Go语言写的高性能的json解析器:GoJay

    GoJay是一个用Go语言写的高性能JSON编码/解码工具,本文详细介绍了实现JSON格式编码/解码的结构体代码,...

  • 可信自测大纲

    需求分析与软件设计 需求分析可信设计 编码实现(C语言) 编程语言能力通用编码规范安全编码规范调试和定位编译原理编...

  • 简单的行程编码-C语言实现

    简单的行程编码用C语言实现,仍有很多不足,欢迎指出

  • URLEncode编解码

    Java实现: Js实现:encodeURIComponent(编码的具体内容) 解码 decodeURIComp...

  • C语言操作openssl

    C语言调用OpenSSL加解密 md5加密 sha1加密 base64 编码 base64 解码 调用base64...

  • 《数学之美》

    摘录 第一章:文字和语言 VS 数字和信息 通信的原理和信息传播的模型、(信源)编码和最短编码、解码的规则,语法、...

  • 如何构建一个交易系统(十二)

    编码解码,不得不再次搬出这个话题, 编码解码就是程序语言之间交流的语言! 一旦你适应了用粗暴的思考架设了你的设计,...

网友评论

      本文标题:c语言实现qp的编码和解码

      本文链接:https://www.haomeiwen.com/subject/tdlcgqtx.html