C/C++知识点之openssl rc5 ecb模式
王天鹏 2019-04-10 来源 : 阅读 1161 评论 0

摘要:本文主要向大家介绍了C/C++知识点之openssl rc5 ecb模式,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了C/C++知识点之openssl  rc5  ecb模式,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

C/C++知识点之openssl  rc5  ecb模式

ECB(Electronic Code Book)/电码本模式
原理非常简单数据按照8个字节一段进行加密或解密得到一段8个字节的密文或者明文,最后一段不足8个字节,按照需求补足8个字节进行计算,之后按照顺序将计算所得的数据连在一起即可,各段数据之间互不影响
特点是 简单 有利于并行计算 容易被***

用到两个函数
void RC532setkey(RC532KEY key, int len, const unsigned char data, int rounds);
根据密钥计算密钥组 连同 轮次round 填充到key中 后面的加密解密都须要用的这个key
data:密钥  len:密钥长度 0到2040位  rounds:轮次 可选 8/12/16

void RC532ecbencrypt(const unsigned char in, unsigned char out, RC532KEY key, int enc);
in:输入  out:输出   key:RC532setkey中初始化好的  enc: 可选 RC5ENCRYPT(加密)/RC5DECRYPT(解密)
注意这个函数每次只能处理8字节的数据 加/解密时源数据顺序传入


#include <openssl/rc5.h>#include <stdio.h>#include <string>#include <string.h>int main(){
    RC5_32_KEY  rckey;    unsigned char pwd[20] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x10, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0xe1, 0xe2, 0xe3, 0xe4 };

    RC5_32_set_key(&rckey, 20, pwd, RC5_8_ROUNDS);    std::string in = ""accidfdsa测试dfd"";    std::string strout = """";    std::string strjie = """";    char tempin[8];    char tempout[8];    // 加密    for(size_t i = 0; i < in.size(); i += 8)
    {        if(i + 8 <= in.size())            memcpy(tempin, in.c_str()+i, 8);        else
        {            memset(tempin, 0, 8);            memcpy(tempin, in.c_str()+i, in.size()-i);
        }

        RC5_32_ecb_encrypt((const unsigned char*)(tempin), (unsigned char*)tempout, &rckey, RC5_ENCRYPT);
        strout.append(tempout, 8);
    }    // 解密    for(size_t i = 0; i < strout.size(); i += 8)
    {        if(i + 8 <= strout.size())            memcpy(tempin, strout.c_str()+i, 8);        else
        {            memset(tempin, 0, 8);            memcpy(tempin, strout.c_str()+i, strout.size() - i);
        }   

        RC5_32_ecb_encrypt((const unsigned char*)(tempin), (unsigned char*)tempout, &rckey, RC5_DECRYPT);        if(strjie.size() + 8 > in.size())
            strjie.append(tempout, in.size() - strjie.size());        else
            strjie.append(tempout, 8);
    }    printf(""-- %s"", strjie.c_str());                                                                                                                                                                                                                                          
    return 0;
}

g++ -g -o main main.cpp -I/usr/include/openssl -lssl -lcrypto -L/usr/lib64

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @职坐标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论
本文作者 联系TA

天行健,君子以自强不息;地势坤,君子以厚德载物

  • 10
    文章
  • 2676
    人气
  • 100%
    受欢迎度

已有1人表明态度,100%喜欢该老师!

进入TA的空间
求职秘籍 直通车
  • 索取资料 索取资料 索取资料
  • 答疑解惑 答疑解惑 答疑解惑
  • 技术交流 技术交流 技术交流
  • 职业测评 职业测评 职业测评
  • 面试技巧 面试技巧 面试技巧
  • 高薪秘笈 高薪秘笈 高薪秘笈
TA的其他文章 更多>>
C/C++知识点之C语言的运算符与表达式(下)
经验技巧 100% 的用户喜欢
C/C++知识点之mac 下完全安装 ffmpeg
经验技巧 0% 的用户喜欢
C/C++知识点之mac 下安装 nginx 加 rtmp 模块
经验技巧 0% 的用户喜欢
C/C++知识点之linux 下安装 nginx 加 rtmp 模块
经验技巧 0% 的用户喜欢
C/C++知识点之学习C的第一步:在不同IDE中完成Helloworld
经验技巧 0% 的用户喜欢
其他海同师资 更多>>
吕益平
吕益平 联系TA
熟悉企业软件开发的产品设计及开发
孔庆琦
孔庆琦 联系TA
对MVC模式和三层架构有深入的研究
周鸣君
周鸣君 联系TA
擅长Hadoop/Spark大数据技术
范佺菁
范佺菁 联系TA
擅长Java语言,只有合理的安排和管理时间你才能做得更多,行得更远!
金延鑫
金延鑫 联系TA
擅长与学生或家长及时有效沟通
经验技巧30天热搜词 更多>>

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程