OpenSSL中對稱加密演算法DES常用函式使用舉例

2021-08-31 18:10:26 字數 3961 閱讀 3499

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!

主要包括3個檔案:

1. cryptotest.h:

#ifndef _cryptotest_h_#define _cryptotest_h_#include using namespace std;typedef enum crypto_mode;string des_encrypt(const string cleartext, const string key, crypto_mode mode);string des_decrypt(const string ciphertext, const string key, crypto_mode mode);#endif //_cryptotest_h_
2. destest.cpp:

#include #include #include #include #include "cryptotest.h"using namespace std;static unsigned char cbc_iv[8] = ;string des_encrypt(const string cleartext, const string key, crypto_mode mode)   if (cleartext.length() % 8 != 0)    strciphertext.clear();   strciphertext.assign(vecciphertext.begin(), vecciphertext.end());  }  break; case cbc:    break; case cfb:    break; case triple_ecb:   else if (key.length() >= 16)  else if (key.length() >= 8)  else    des_key_schedule ks1, ks2, ks3;   des_set_key_unchecked(&ke1, &ks1);   des_set_key_unchecked(&ke2, &ks2);   des_set_key_unchecked(&ke3, &ks3);   const_des_cblock inputtext;   des_cblock outputtext;   vectorvecciphertext;   unsigned char tmp[8];   for (int i = 0; i < cleartext.length() / 8; i ++)    if (cleartext.length() % 8 != 0)    strciphertext.clear();   strciphertext.assign(vecciphertext.begin(), vecciphertext.end());  }  break; case triple_cbc:   else if (key.length() >= 16)  else if (key.length() >= 8)  else    des_key_schedule ks1, ks2, ks3;   des_set_key_unchecked(&ke1, &ks1);   des_set_key_unchecked(&ke2, &ks2);   des_set_key_unchecked(&ke3, &ks3);   memcpy(ivec, cbc_iv, sizeof(cbc_iv));   int ilength = cleartext.length() % 8 ? (cleartext.length() / 8 + 1) * 8 : cleartext.length();   unsigned char* tmp = new unsigned char[ilength + 16];   memset(tmp, 0, ilength);   des_ede3_cbc_encrypt((const unsigned char*)cleartext.c_str(), tmp, cleartext.length()+1, &ks1, &ks2, &ks3, &ivec, des_encrypt);   strciphertext = (char*)tmp;   delete  tmp;  }  break; } return strciphertext;}string des_decrypt(const string ciphertext, const string key, crypto_mode mode)   if (ciphertext.length() % 8 != 0)    strcleartext.clear();   strcleartext.assign(veccleartext.begin(), veccleartext.end());  }  break; case cbc:    break; case cfb:    break; case triple_ecb:   else if (key.length() >= 16)  else if (key.length() >= 8)  else    des_key_schedule ks1, ks2, ks3;   des_set_key_unchecked(&ke1, &ks1);   des_set_key_unchecked(&ke2, &ks2);   des_set_key_unchecked(&ke3, &ks3);   const_des_cblock inputtext;   des_cblock outputtext;   vectorveccleartext;   unsigned char tmp[8];   for (int i = 0; i < ciphertext.length() / 8; i ++)    if (ciphertext.length() % 8 != 0)    strcleartext.clear();   strcleartext.assign(veccleartext.begin(), veccleartext.end());  }  break; case triple_cbc:   else if (key.length() >= 16)  else if (key.length() >= 8)  else    des_key_schedule ks1, ks2, ks3;   des_set_key_unchecked(&ke1, &ks1);   des_set_key_unchecked(&ke2, &ks2);   des_set_key_unchecked(&ke3, &ks3);   memcpy(ivec, cbc_iv, sizeof(cbc_iv));   int ilength = ciphertext.length() % 8 ? (ciphertext.length() / 8 + 1) * 8 : ciphertext.length();   unsigned char* tmp = new unsigned char[ilength];   memset(tmp, 0, ilength);   des_ede3_cbc_encrypt((const unsigned char*)ciphertext.c_str(), tmp, ciphertext.length()+1, &ks1, &ks2, &ks3, &ivec, des_decrypt);   strcleartext = (char*)tmp;   delete  tmp;  }  break; } return strcleartext;}
3. main.cpp:

#include "stdafx.h"#include "cryptotest.h"#include #include using namespace std;void test_des(){ string cleartext = "中國北京12345$abcde%abcde@!!!!"; string ciphertext = ""; string key = "beijingchina1234567890abcdefgh!!!"; crypto_mode mode = triple_cbc; ciphertext = des_encrypt(cleartext, key, mode); string decrypt = des_decrypt(ciphertext, key, mode); cout<

給我老師的人工智慧教程打call!

對稱加密演算法 非對稱加密演算法

對稱加密演算法 對稱加密演算法是應用較早的加密演算法,技術成熟。在對稱加密演算法中,資料發信方將明文 原始資料 和加密金鑰一起經過特殊加密演算法處理後,使其變成複雜的加密密文傳送出去。收信方收到密文後,若想解讀原文,則需要使用加密用過的金鑰及相同演算法的逆演算法對密文進行解密,才能使其恢復成可讀明文...

對稱加密演算法 DES加密演算法

一 對稱加密演算法 對稱加密也稱為常規加密 私鑰或單鑰加密。乙個對稱加密由5部分組成 明文 plaintext 這是原始資訊或資料,作為演算法的輸入。加密演算法 encryption algorithm 加密演算法對明文進行各種替換和轉換。金鑰 secret key 金鑰也是演算法的輸入。演算法進行...

對稱加密演算法

缺點 演算法 說明des 資料加密標準 用的少,因為強度不夠 3des 使用3個金鑰,對相同的資料執行三次加密,強度增強 aes高階加密標準,目前美國 局使用的 蘋果的鑰匙串訪問採用的是 aes 加密 ecb 加密 openssl enc des ecb k 616263 nosalt in msg...