密码模块二三事

公司需要,需要对一些加解密模块做调研。

把一些参考资料贴出来

AES、DES、3DES算法的C语言实现

这个是内核中摘出的算法,不知道为什么特别慢,DES加解密一起只能到7M/S的数据处理

OpenSSL - DES

openssl的des很快,加密解密一起能到28M/S的速度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <openssl/des.h>

int main(int argc,char **argv)
{
DES_cblock key;
/**//* DES_random_key(&key); */ /**//* generate a random key */
DES_string_to_key("pass", &key);

DES_key_schedule schedule;
DES_set_key_checked(&key, &schedule);

const_DES_cblock input = "hehehe";
DES_cblock output;

printf("cleartext:%s ", input);

DES_ecb_encrypt(&input, &output, &schedule, DES_ENCRYPT);
printf("Encrypted! ");

printf("ciphertext:");
int i;
for (i = 0; i < sizeof(input); i++)
printf("%02x", output[i]);
printf(" ");

DES_ecb_encrypt(&output, &input, &schedule, DES_DECRYPT);
printf("Decrypted! ");
printf("cleartext:%s ", input);

return 0;
}

DES算法的加密密钥是根据用户输入的密码生成的,该算法把64位密码中的第8位、第16位、第24位、第32位、第40位、第48位、第56位、第64位作为奇偶校验位,在计算密钥时要忽略这8位.如果输入的密码只是在这8位上有区别的话,那么操作后的结果将是一样的.

例:

输入的密码为wuzhenll,密钥的16进制表示为77 75 7A 68 65 6E 6C 6C

任意改变这64位数据的奇偶校验位,可以得到16个不同的密码,把8个奇偶检验位全取反后:

w->v

u->t

z->{

h->i

e->d

n->o

l->m

形成新密码:vt{idomm

表面上新密码和原密码迥然不同,但是由于他们仅在奇偶校验位上有区别,所以用这两个密码进行加密解密操作得到的结果是一样的.

openssl的使用也非常简单

使用最新openssl 1.0.1h 编译安装 openssh 6.6p1

这是讲如何安装openssl的

OpenSSL编程-DES编程详解

openssl之aes加密-源码分析 AES_encrypt 与 AES_cbc_encrypt ,加密模式

OPENSSL库的使用-DES篇

这三篇都是将如何使用的

未完待续