密码模块二三事

原创内容,转载请注明出处

Posted by Weakyon Blog on January 14, 2015

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

把一些参考资料贴出来

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

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

OpenSSL - DES

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

#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篇

这三篇都是将如何使用的

未完待续

14 Jan 2015