当前位置:  技术问答>linux和unix

6个0和6个1作为密钥用3des加密结果一样,请帮我看下这个程序的问题

    来源: 互联网  发布时间:2016-04-16

    本文导语:  作了个加密认证程序,后来测试出0和1加密出来结果一样。 现在借助网上一个程序改了下,如下: #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include...

作了个加密认证程序,后来测试出0和1加密出来结果一样。
现在借助网上一个程序改了下,如下:
#include 
#include 
#include 
#include 
#include 

#include 

#include 
#include 
#include 

#include 
#include 
#include 
#include 

#include 


int main(void)
{
    int docontinue = 1;

    unsigned char *data = "hello world!"; /* 明文 */
    int data_len;
    int data_rest;
    unsigned char ch;

    unsigned char *src = NULL; /* 补齐后的明文 */
    unsigned char *dst = NULL; /* 解密后的明文 */
    int len;
    unsigned char tmp[8];
    unsigned char in[8];
    unsigned char out[8];

    char *k = "111111"; /* 原始密钥 */
    int key_len;
#define LEN_OF_KEY              24
    unsigned char key[LEN_OF_KEY]; /* 补齐后的密钥 */
    unsigned char block_key[9];
    DES_key_schedule ks,ks2,ks3;

    /* 构造补齐后的密钥 */
    key_len = strlen(k);
    memcpy(key, k, key_len);
    memset(key + key_len, 0x00, LEN_OF_KEY - key_len);

    /* 分析补齐明文所需空间及补齐填充数据 */
    data_len = strlen(data);
    data_rest = data_len % 8;
    len = data_len + (8 - data_rest);
    ch = 8 - data_rest;

    src = malloc(len);
    dst = malloc(len);
    if (NULL == src || NULL == dst)
    {
        docontinue = 0;
    }
    if (docontinue)
    {
        int count;
        int i;

        /* 构造补齐后的加密内容 */
        memset(src, 0, len);
        memcpy(src, data, data_len);
        memset(src + data_len, ch, 8 - data_rest);

        /* 密钥置换 */
        memset(block_key, 0, sizeof(block_key));
        memcpy(block_key, key + 0, 8);
        DES_set_key_unchecked((const_DES_cblock*)block_key, &ks);
        memcpy(block_key, key + 8, 8);
        DES_set_key_unchecked((const_DES_cblock*)block_key, &ks2);
        memcpy(block_key, key + 16, 8);
        DES_set_key_unchecked((const_DES_cblock*)block_key, &ks3);

        printf("before encrypt:");
        for (i = 0; i 

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 如何将comm 2>>的重定向结果传输到一个函数呢,作为这个函数的参数输入
  • 我的e盘上有resin 2.0.2 作为服务器。今天我今天在e盘又装了tomcat,结果两个都不能用了,为什么?
  • 错误:将'const x'作为'x'的'this'实参时丢弃了类型限定问题解决
  • 如何挂载/etc?如何将配置文件目录作为单独作为一个块?
  • Windows和Linux下C++类成员方法作为线程函数方法介绍
  • javascript开源软件 iis7站长之家
  • 小弟刚来,只能给100分!请教一下各位:学习UNIX下的程序设计,用什么作为学习的“入门书”?推荐一个作为我的第一本书吧!
  • 小弟刚来,只能给100分!请教一下各位:学习UNIX,用什么作为学习的“入门书”?推荐一个作为我的第一本书吧!我最想用FREEBSD!
  • 小弟刚来,只能给100分!请教一下各位:学习LINUX下的程序设计,用什么作为学习的“入门书”?推荐一个作为我的第一本书吧!
  • 加载图象作为资源????
  • 如何使Linux使用别的机器作为代理上网(字符界面下)
  • VI搜索时怎样将复制的内容作为搜索的内容??
  • resin可以作为win2000的一个服务启动吗?如何实现
  • linux作为服务器的问题
  • 如何把java的一个应用作为nt/2000的一个服务启动。
  • 我想写一个FTP客户端的软件,能否推荐几款软件作为参考?
  • 请问:linux下如何将一个类的指针作为参数传给pthread_create创建的线程?
  • 在linux中,中断处理是否作为单独的进程执行?
  • shell 按当前时间作为文件名建立文件夹
  • make:没有什么可以作为“default”
  • shell脚本中,如何取当前时间作为文件夹的名称
  • 作为一个普通用户,如何查看远程电脑中linux是什么公司的linux?
  • Linux不同版本内核目录下的ChangeLog是以哪个版本作为对比?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3