Openssl Des - 1

翻译 2012年03月24日 22:07:43

DES部分的编码,和AES有明显的不同,作者应该不是同一个人。

显卡一下类型的定义:

定义了参与计算的数据类型,其实就是字符数组。

typedef unsigned char DES_cblock[8];

这个定义很有意思,把const修饰符去掉了,原因是gcc2.8.1 在Solaris上会有问题。

typedef /* const */ unsigned char const_DES_cblock[8];
/* With "const", gcc 2.8.1 on Solaris thinks that DES_cblock *

 * and const_DES_cblock * are incompatible pointer types. */


接下来看一下对DES key的定义,我们都知道DES的密钥是8个字节,在这个定义中,通过Union方式,不仅定义了8个字节的数据,同时也定义了2个DES_long型的数据,这个DES_long类型,在32位机器上,应该是4个字节。

typedef struct DES_ks
    {
    union
    {
    DES_cblock cblock;
    /* make sure things are correct size on machines with
     * 8 byte longs */
    DES_LONG deslong[2];
    } ks[16];
    } DES_key_schedule;


const char *DES_options(void);

返回DES算法的选项,包括: PTR, ptr 或者idx, risc是risc1,risc2,cisc, unroll是2或者6, 定义DES_LONG的类型是int还是long;


void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output,
              DES_key_schedule *ks1,DES_key_schedule *ks2,
              DES_key_schedule *ks3, int enc);

3DES ECB算法;

input: 输入数据

output: 输出数据

ks1,ks2,ks3, 3DES算法的三只密钥,实际应用中,大家更习惯于用两只密钥,调用此函数时,只需在ks3处传入ks1即可;

enc:加密:DES_ENCRYPT , 解密:DES_DECRYPT


DES_LONG DES_cbc_cksum(const unsigned char *input,DES_cblock *output,
               long length,DES_key_schedule *schedule,
               const_DES_cblock *ivec);

DES CBC模式的checksum计算;

input:输入数据;

output:输出数据;

length: 数据长度;

schedule: 密钥;

ivec: 做cbc的初始化向量数据;

返回值: checksum结果


/* DES_cbc_encrypt does not update the IV!  Use DES_ncbc_encrypt instead. */
void DES_cbc_encrypt(const unsigned char *input,unsigned char *output,
             long length,DES_key_schedule *schedule,DES_cblock *ivec,
             int enc);
void DES_ncbc_encrypt(const unsigned char *input,unsigned char *output,
              long length,DES_key_schedule *schedule,DES_cblock *ivec,
              int enc);

上面这两个函数都是对数据做DES CBC加密,区别是加密/解密操作完成之后,ivec是否被更新。

注意,这里面有个很费解的地方,DES_cbc_encrypt函数不更新ivec,DES_ncbc_encrypt更新ivec。

input: 输入数据;

output: 输出数据;

length: 数据长度;

schedule:密钥;

ivec: 初始化向量;

enc:DES_ENCRYPT , 解密:DES_DECRYPT;


void DES_xcbc_encrypt(const unsigned char *input,unsigned char *output,
              long length,DES_key_schedule *schedule,DES_cblock *ivec,
              const_DES_cblock *inw,const_DES_cblock *outw,int enc);

DES_xcbc_encrypt算法,除了ivec初始化向量,还有一个inw向量做为初始化向量的数据,outw是输出最后一块数据的结果;

input: 输入数据;

output: 输出数据;

length:数据长度;

schedule: 密钥;

ivec: 初始化向量;

inw:初始化向量数据;

outw:输出数据;

enc:DES_ENCRYPT , 解密:DES_DECRYPT;


void DES_cfb_encrypt(const unsigned char *in,unsigned char *out,int numbits,
             long length,DES_key_schedule *schedule,DES_cblock *ivec,
             int enc);

DES CFB模式计算。

in: 输入数据;

out: 输出数据;

numbits: CFB位数;

length: 数据长度;

ivec: 初始化向量数据;

enc:DES_ENCRYPT , 解密:DES_DECRYPT;



void DES_ecb_encrypt(const_DES_cblock *input,DES_cblock *output,
             DES_key_schedule *ks,int enc);

DES ECB计算;

input: 输入数据;

output: 输出数据;

ks: 密钥;

enc:DES_ENCRYPT , 解密:DES_DECRYPT;

void DES_encrypt1(DES_LONG *data,DES_key_schedule *ks, int enc);

DES计算,是内部函数,库函数调用此函数,库中其他函数负责从long×数据转化成char×,负责判断内存数据是否对齐等等,在用户程序中,应该尽量避免直接调用此函数;

data: 输入数据/ 输出数据;

ks: 密钥;

enc:DES_ENCRYPT , 解密:DES_DECRYPT;


void DES_encrypt2(DES_LONG *data,DES_key_schedule *ks, int enc);

此函数同样是内部函数,与DES_encrypt2相同,但是不包括IP,FP计算,库函数中3DES算法实现调用此函数;

IP() DES_encrypt2() DES_encrypt2() DES_encrypt2() FP() 这一序列调用,与DES_encrypt1() DES_encrypt1() DES_encrypt1() 相同,但是速度更快;


void DES_encrypt3(DES_LONG *data, DES_key_schedule *ks1,
          DES_key_schedule *ks2, DES_key_schedule *ks3);

3DES加密算法,库函数调用,不推荐用户直接使用;


void DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1,
          DES_key_schedule *ks2, DES_key_schedule *ks3);

3DES解密算法,库函数调用,不推荐用户之间使用;


void DES_ede3_cbc_encrypt(const unsigned char *input,unsigned char *output,
              long length,
              DES_key_schedule *ks1,DES_key_schedule *ks2,
              DES_key_schedule *ks3,DES_cblock *ivec,int enc);

3DES CBC模式计算;

input: 输入数据;

output: 输出数据;

length: 长度;

ks1:密钥1;

ks2:密钥2;

ks3:密钥3;

ivec:初始化向量;

enc:DES_ENCRYPT , 解密:DES_DECRYPT;


void DES_ede3_cbcm_encrypt(const unsigned char *in,unsigned char *out,
               long length,
               DES_key_schedule *ks1,DES_key_schedule *ks2,
               DES_key_schedule *ks3,
               DES_cblock *ivec1,DES_cblock *ivec2,
               int enc);

3DES CBCM模式计算;

input: 输入数据;

output: 输出数据;

length: 长度;

ks1:密钥1;

ks2:密钥2;

ks3:密钥3;

ivec1:初始化向量;

ivec2:加密/解密后的参与异或的向量数据;

enc:DES_ENCRYPT , 解密:DES_DECRYPT;





void DES_ede3_cfb64_encrypt(const unsigned char *in,unsigned char *out,
                long length,DES_key_schedule *ks1,
                DES_key_schedule *ks2,DES_key_schedule *ks3,
                DES_cblock *ivec,int *num,int enc);

3DES CFB64位模式计算;

void DES_ede3_cfb_encrypt(const unsigned char *in,unsigned char *out,
              int numbits,long length,DES_key_schedule *ks1,
              DES_key_schedule *ks2,DES_key_schedule *ks3,
              DES_cblock *ivec,int enc);

3DES CFB模式, numbits定义了多少位数;

void DES_ede3_ofb64_encrypt(const unsigned char *in,unsigned char *out,
                long length,DES_key_schedule *ks1,
                DES_key_schedule *ks2,DES_key_schedule *ks3,
                DES_cblock *ivec,int *num);

3DES OFB64位模式;






相关文章推荐

OpenSSL中对称加密算法DES常用函数使用举例

OpenSSL中对称加密算法DES常用函数使用举例!

对称加密算法之DES介绍

对称加密算法之DES介绍!

使用openssl库进行DES加密

openssl库实现了大多数的加密算法,如AES,DES,RSAdend
  • p0x1307
  • p0x1307
  • 2014年10月15日 19:35
  • 2956

openssl 实现SHA1,DES等加密算法

编码规则:Digest = Base64(SHA1(str1 + “”+TimeStamp));Result=URLEncoding(ID+”” + TimeStamp)); Result = ...

openssl学习篇之base64编码、解码;md5 摘要;sha1摘要;3des加密,解密;rsa算法

openssl学习篇之base64编码、解码 完善在上一篇 “openssl学习篇之base64编码、解码中有写出实现的代码, 经实际的运行中,发现如果字符串长超过47会产生BUG,返回空,所以修正了...

C语言利用openSSL库DES模块加密

在通讯过程中为了防止普通的玩家截取协议修改内容并且发送,我们是有必要对协议进行加密的。当前这样的加密手段都已经是变成世界里面的基础设施了。我们只需要将其引入到工程中就好。本文将会基于OpenSSL来编...

C/C++使用openssl进行摘要和加密解密(md5, sha256, des, rsa)

#include #include #include #include "openssl/md5.h" #include "openssl/sha.h" #include "openssl/de...

解决linux c利用openssl进行3des和安卓封装的接口加密解密出的字符串不一样的问题

做项目中需要对密码进行加密,使用linux的openssl进行3des加密解密,发现加密出来的字符串和安卓封装的接口加密后的字符串不一样,之后发现是安卓端对加密出来的字符进行了base64编码,加上b...

OPENSSL库的使用-DES篇

一、DES算法简介 1、DES算法介绍         DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。 明文按64位进行分组,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Openssl Des - 1
举报原因:
原因补充:

(最多只允许输入30个字)