openssl使用des加密解密字符串

转载:http://www.codealias.info/technotes/des_encryption_using_openssl_a_simple_example

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <openssl/des.h>


char *
Encrypt( char *Key, char *Msg, int size)
{

	static char*    Res;
	int             n=0;
	DES_cblock      Key2;
	DES_key_schedule schedule;

	Res = ( char * ) malloc( size );

	/* Prepare the key for use with DES_cfb64_encrypt */
	memcpy( Key2, Key,8);
	DES_set_odd_parity( &Key2 );
	DES_set_key_checked( &Key2, &schedule );

	/* Encryption occurs here */
	DES_cfb64_encrypt( ( unsigned char * ) Msg, ( unsigned char * ) Res,
		size, &schedule, &Key2, &n, DES_ENCRYPT );

	return (Res);
}


char *
Decrypt( char *Key, char *Msg, int size)
{

	static char*    Res;
	int             n=0;

	DES_cblock      Key2;
	DES_key_schedule schedule;

	Res = ( char * ) malloc( size );

	/* Prepare the key for use with DES_cfb64_encrypt */
	memcpy( Key2, Key,8);
	DES_set_odd_parity( &Key2 );
	DES_set_key_checked( &Key2, &schedule );

	/* Decryption occurs here */
	DES_cfb64_encrypt( ( unsigned char * ) Msg, ( unsigned char * ) Res,
		size, &schedule, &Key2, &n, DES_DECRYPT );

	return (Res);

}

int main() {

	char key[]="password";
	char clear[]="This is a secret message";
	char *decrypted;
	char *encrypted;

	encrypted=malloc(sizeof(clear));
	decrypted=malloc(sizeof(clear));

	printf("Clear text\t : %s \n",clear);
	memcpy(encrypted,Encrypt(key,clear,sizeof(clear)), sizeof(clear));
	printf("Encrypted text\t : %s \n",encrypted);
	memcpy(decrypted,Decrypt(key,encrypted,sizeof(clear)), sizeof(clear));
	printf("Decrypted text\t : %s \n",decrypted);



	return (0);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在iOS中使用OpenSSL进行3DES CBC加解密,你可以使用OpenSSL的C语言接口来实现。以下是一个示例代码,演示了如何在Objective-C中使用OpenSSL进行3DES CBC加解密: ```objc // 导入OpenSSL头文件 #import <openssl/des.h> // 加密函数 NSString *encrypt3DESCBC(NSString *plainText, NSString *key, NSString *iv) { const char *cKey = [key cStringUsingEncoding:NSUTF8StringEncoding]; const char *cIV = [iv cStringUsingEncoding:NSUTF8StringEncoding]; const char *cPlainText = [plainText cStringUsingEncoding:NSUTF8StringEncoding]; int plainTextLength = strlen(cPlainText); // 初始化3DES上下文 DES_cblock desKey; memset(desKey, 0, sizeof(DES_cblock)); memcpy(desKey, cKey, 24); DES_key_schedule keySchedule; DES_set_key_unchecked(&desKey, &keySchedule); // 加密 size_t bufferSize = plainTextLength + 8; unsigned char *buffer = malloc(bufferSize); memset(buffer, 0, bufferSize); DES_ncbc_encrypt((unsigned char *)cPlainText, buffer, plainTextLength, &keySchedule, (DES_cblock *)cIV, DES_ENCRYPT); // 将加密后的数据转换为十六进制字符串 NSMutableString *encryptedHex = [NSMutableString stringWithCapacity:bufferSize * 2]; for (int i = 0; i < bufferSize; i++) { [encryptedHex appendFormat:@"%02x", buffer[i]]; } free(buffer); return encryptedHex; } // 解密函数 NSString *decrypt3DESCBC(NSString *encryptedText, NSString *key, NSString *iv) { const char *cKey = [key cStringUsingEncoding:NSUTF8StringEncoding]; const char *cIV = [iv cStringUsingEncoding:NSUTF8StringEncoding]; const char *cEncryptedText = [encryptedText cStringUsingEncoding:NSUTF8StringEncoding]; int encryptedTextLength = (int)[encryptedText length] / 2; // 初始化3DES上下文 DES_cblock desKey; memset(desKey, 0, sizeof(DES_cblock)); memcpy(desKey, cKey, 24); DES_key_schedule keySchedule; DES_set_key_unchecked(&desKey, &keySchedule); // 将十六进制字符串转换为加密后的数据 unsigned char *buffer = malloc(encryptedTextLength); memset(buffer, 0, encryptedTextLength); for (int i = 0; i < encryptedTextLength; i++) { sscanf(cEncryptedText + i * 2, "%2hhx", &buffer[i]); } // 解密 size_t bufferSize = encryptedTextLength; unsigned char *plainText = malloc(bufferSize); memset(plainText, 0, bufferSize); DES_ncbc_encrypt(buffer, plainText, bufferSize, &keySchedule, (DES_cblock *)cIV, DES_DECRYPT); free(buffer); return [[NSString alloc] initWithBytes:plainText length:bufferSize encoding:NSUTF8StringEncoding]; } ``` 使用示例: ```objc NSString *plainText = @"This is a secret message."; NSString *key = @"123456781234567812345678"; NSString *iv = @"12345678"; NSString *encryptedText = encrypt3DESCBC(plainText, key, iv); NSLog(@"Encrypted Text: %@", encryptedText); NSString *decryptedText = decrypt3DESCBC(encryptedText, key, iv); NSLog(@"Decrypted Text: %@", decryptedText); ``` 请确保你已经正确导入OpenSSL库,并且在编译设置中设置了正确的头文件搜索路径和链接库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值