首页
社区
课程
招聘
[旧帖] [原创]常见密码算法总结--(3)加密模式的openssl代码分析 0.00雪花
发表于: 2010-5-30 23:16 4580

[旧帖] [原创]常见密码算法总结--(3)加密模式的openssl代码分析 0.00雪花

2010-5-30 23:16
4580

《常见密码算法总结--(1)分组对称密码》见
http://bbs.pediy.com/showthread.php?t=113921
29fK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0D9L8$3N6Q4x3X3g2U0M7$3c8F1i4K6u0W2L8X3g2@1i4K6u0r3e0V1A6K9K9s2g2v1K9h3&6Z5N6h3q4Q4x3V1k6S2M7X3y4Z5K9i4k6W2i4K6u0r3x3U0l9I4x3q4)9J5c8U0l9#2i4K6u0r3x3U0N6Q4x3V1j5#2y4U0t1&6y4o6f1#2i4K6u0W2j5i4y4H3P5l9`.`.

《常见密码算法总结--(2)分组密码加密模式》见
http://bbs.pediy.com/showthread.php?t=114169
110K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0D9L8$3N6Q4x3X3g2U0M7$3c8F1i4K6u0W2L8X3g2@1i4K6u0r3e0V1A6K9K9s2g2v1K9h3&6Z5N6h3q4Q4x3V1k6S2M7X3y4Z5K9i4k6W2i4K6u0r3x3U0l9I4x3q4)9J5c8U0l9#2i4K6u0r3x3K6m8Q4x3V1j5#2y4U0x3#2x3K6p5K6i4K6u0W2j5i4y4H3P5l9`.`.

NJZhuJinhua@csdn May.30, 2010
http://bbs.pediy.com/showthread.php?t=114170
ae9K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0D9L8$3N6Q4x3X3g2U0M7$3c8F1i4K6u0W2L8X3g2@1i4K6u0r3e0V1A6K9K9s2g2v1K9h3&6Z5N6h3q4Q4x3V1k6S2M7X3y4Z5K9i4k6W2i4K6u0r3x3U0l9I4x3q4)9J5c8U0l9#2i4K6u0r3x3K6m8Q4x3V1j5#2y4U0x3#2x3K6b7K6i4K6u0W2j5i4y4H3P5l9`.`.
转载请注明出处。

(三)加密模式的openssl代码分析
openssl(本文所用openssl代码为1.0.0版本,2010.03.29发布。ab6K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3!0H3k6h3&6K6M7$3I4Q4x3X3g2G2M7X3M7`. 本文所用的内容最近几年应该未有更新,因而版本似乎也没多少关系)代码中crypto\modes目录下提供了cbc128,cfb128,ctr128,cts128,ofb128模式的实现。modes.h提供接口声明,其余诸文件分别提供了各种模式。

typedef void (*block128_f)(const unsigned char in[16],
                           unsigned char out[16],
                           const void *key);

typedef void (*cbc128_f)(const unsigned char *in, unsigned char *out,
                         size_t len, const void *key,
                         unsigned char ivec[16], int enc);

//cbc128的加密与解密
void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out,
                           size_t len, const void *key,
                           unsigned char ivec[16], block128_f block);
void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out,
                           size_t len, const void *key,
                           unsigned char ivec[16], block128_f block);

//ctr128的加密与解密
void CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out,
                           size_t len, const void *key,
                           unsigned char ivec[16], unsigned char ecount_buf[16],
                           unsigned int *num, block128_f block);


//ofb128的加密与解密
void CRYPTO_ofb128_encrypt(const unsigned char *in, unsigned char *out,
                           size_t len, const void *key,
                           unsigned char ivec[16], int *num,
                           block128_f block);


//cfb128的加密与解密
void CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out,
                           size_t len, const void *key,
                           unsigned char ivec[16], int *num,
                           int enc, block128_f block);
void CRYPTO_cfb128_8_encrypt(const unsigned char *in, unsigned char *out,
                             size_t length, const void *key,
                             unsigned char ivec[16], int *num,
                             int enc, block128_f block);
void CRYPTO_cfb128_1_encrypt(const unsigned char *in, unsigned char *out,
                             size_t bits, const void *key,
                             unsigned char ivec[16], int *num,
                             int enc, block128_f block);


//cts128模式
size_t CRYPTO_cts128_encrypt_block(const unsigned char *in, unsigned char *out,
                                   size_t len, const void *key,
                                   unsigned char ivec[16], block128_f block);
size_t CRYPTO_cts128_encrypt(const unsigned char *in, unsigned char *out,
                             size_t len, const void *key,
                             unsigned char ivec[16], cbc128_f cbc);
size_t CRYPTO_cts128_decrypt_block(const unsigned char *in, unsigned char *out,
                                   size_t len, const void *key,
                                   unsigned char ivec[16], block128_f block);
size_t CRYPTO_cts128_decrypt(const unsigned char *in, unsigned char *out,
                             size_t len, const void *key,
                             unsigned char ivec[16], cbc128_f cbc);
void AES_cbc_encrypt(const unsigned char *in, unsigned char *out,
		     size_t len, const AES_KEY *key,
		     unsigned char *ivec, const int enc) {

	if (enc)
		CRYPTO_cbc128_encrypt(in,out,len,key,ivec,(block128_f)AES_encrypt);
	else
		CRYPTO_cbc128_decrypt(in,out,len,key,ivec,(block128_f)AES_decrypt);
}

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 7
支持
分享
最新回复 (5)
雪    币: 13
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
顶下 站个沙发
2010-6-2 10:49
0
雪    币: 126
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
挺好的学习材料,来看一下
2010-6-15 11:35
0
雪    币: 427
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
好东西,收藏了
2010-6-15 17:08
0
雪    币: 114
活跃值: (70)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
【原创】常见密码算法总结--(4)加密模式的openssl代码分析之cfb模式
http://bbs.pediy.com/showthread.php?t=115184
2010-6-16 12:40
0
雪    币: 217
活跃值: (45)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
no offence,but....这样也变成精华??
2010-6-17 09:16
0
游客
登录 | 注册 方可回帖
返回