導航:首頁 > 源碼編譯 > 數據加密演算法

數據加密演算法

發布時間:2022-01-13 09:20:23

『壹』 解釋一下數據加密,目前的數據加密演算法介紹一下

DES(Data Encryption Standard):數據加密標准,速度較快,適用於加密大量數據的場合;

3DES(Triple DES):是基於DES,對一塊數據用三個不同的密鑰進行三次加密,強度更高;

RC2和 RC4:用變長密鑰對大量數據進行加密,比 DES 快;

IDEA(International Data Encryption Algorithm)國際數據加密演算法,使用 128 位密鑰提供非常強的安全性;

RSA:由 RSA 公司發明,是一個支持變長密鑰的公共密鑰演算法,需要加密的文件快的長度也是可變的;

DSA(Digital Signature Algorithm):數字簽名演算法,是一種標準的 DSS(數字簽名標准);

AES(Advanced Encryption Standard):高級加密標准,是下一代的加密演算法標准,速度快,安全級別高,目前 AES 標準的一個實現是 Rijndael 演算法;

BLOWFISH,它使用變長的密鑰,長度可達448位,運行速度很快;

其它演算法,如ElGamal、Deffie-Hellman、新型橢圓曲線演算法ECC等。

『貳』 簡單數據加密演算法

// ecfileDlg.cpp : implementation file
//

#include "stdafx.h"
#include "ecfile.h"
#include "ecfileDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
CAboutDlg();

// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum ;
//}}AFX_DATA

// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL

// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CEcfileDlg dialog

CEcfileDlg::CEcfileDlg(CWnd* pParent /*=NULL*/)
: CDialog(CEcfileDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CEcfileDlg)
m_path = _T("");
m_pass = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CEcfileDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CEcfileDlg)
DDX_Text(pDX, IDC_PASSWORD, m_path);
DDX_Text(pDX, IDC_PASS1, m_pass);
//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CEcfileDlg, CDialog)
//{{AFX_MSG_MAP(CEcfileDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_E, OnE)
ON_BN_CLICKED(IDC_D, OnD)
ON_BN_CLICKED(IDC_BROW, OnBrow)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

BOOL CEcfileDlg::OnInitDialog()
{
CDialog::OnInitDialog();

ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}

SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);

return TRUE;
}

void CEcfileDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}

void CEcfileDlg::OnPaint()
{
CDialog::OnPaint();
}

HCURSOR CEcfileDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}

void CEcfileDlg::OnE()
{
UpdateData(TRUE);
if(m_path == "")
{
AfxMessageBox("怎麼沒有選擇要加密的文件就開始加密啊?");
return;
}

UpdateData(TRUE);
if(m_pass == "")
{
AfxMessageBox("沒有寫上密碼");
return;
}

if(ecfile(m_path))
{
MessageBox("加密成功了已經");
}
else
{
MessageBox("沒加密成功");
}
}

void CEcfileDlg::OnD()
{
UpdateData(TRUE);
if(m_path == "")
{
AfxMessageBox("怎麼沒有選擇要加密的文件就開始解密啊?");
return;
}

UpdateData(TRUE);
if(m_pass == "")
{
AfxMessageBox("沒有寫上密碼");
return;
}

if(dcfile(m_path))
{
MessageBox("解密成功了");
}
else
{
MessageBox("解密失敗了");
}
}

void CEcfileDlg::OnBrow()
{
CFileDialog dlg(TRUE);
if(dlg.DoModal() == IDOK)
{
m_path = dlg.GetPathName();
UpdateData(FALSE);
}
else
{
return;
}
}

//給文件加密的函數
BOOL CEcfileDlg::ecfile(LPCTSTR fpath)
{
char *data;
CFile *file;
DWORD flen;

m_password = epass();

file = new CFile;
if ( !file->Open(fpath, CFile::shareDenyNone|CFile::modeReadWrite))
{
return FALSE;
}

flen = file->GetLength();
data = new char[(int)flen];

file->SeekToBegin();
file->Read(data, flen);

for(int i=0; i<(int)flen; i++)
{
data[i] ^= m_password;
data[i] ^= flen;
}

file->SeekToBegin();
file->Write(data, flen);
delete[] data;

//添加密碼驗證信息
char cpass[5] = "love";
for(int j=0; j<5; j++)
{
cpass[j] ^= m_password;
}
file->SeekToEnd();
file->Write(&cpass, 5);
file->Close();
delete file;

return TRUE;
}

//給文件解密的函數
BOOL CEcfileDlg::dcfile(LPCTSTR fpath)
{
char *data;
CFile *file;
DWORD flen;
char love[5];

file = new CFile;
if( !file->Open(fpath, CFile::shareDenyNone|CFile::modeReadWrite))
{
return FALSE;
}

flen = file->GetLength();
data = new char[(int)flen];

//檢驗密碼是不是正確
file->Seek(-5, CFile::end);
file->Read(&love, 5);

m_password = epass();

for(int i=0; i<5; i++)
{
love[i] ^= m_password;
}

if(strcmp(love, "love")!=0)
{
return FALSE;
}

//解密
file->SeekToBegin();
file->Read(data, flen);

for(int j=0; j<(int)flen; j++)
{
data[j] ^= m_password;
data[j] ^= (flen-5);
}
file->SeekToBegin();
file->Write(data, flen);
file->SetLength(flen-5);
file->Close();

delete[] data;
delete file;
return TRUE;
}

//獲得密碼的函數
__int64 CEcfileDlg::epass()
{
DWORD plen;
char *ppass;
__int64 mc= 8757735233305;
UpdateData(TRUE);

ppass = m_pass.GetBuffer(0);

plen = strlen(ppass);

for(int i=0; i<(int)plen; i++)
{
mc ^= ppass[i]|128;
}
return mc;
}

『叄』 數據加密演算法可以分為幾大類型,個舉一例說明

分為三類:
1、對稱加密;
2、不對稱加密;
3、不可逆加密。
對稱加密是指加密密鑰和解密密鑰相同;
不對稱加密演算法使用不同的加密密鑰和解密密鑰;
不可逆加密演算法的特徵是加密過程不需要密鑰,並且經過加密的數據無法被解密,只有同樣輸入的輸入數據經過同樣的不可逆演算法才能得到同樣的加密數據。

『肆』 數據加密演算法:

密碼演算法是加密演算法和解密演算法的統稱,它是密碼體制的核心。密碼演算法可以看成一些交換的組合。當輸入為明文時,經過這些變換,輸出就為密文。這是加密交換的過程,此時密碼演算法稱為加密演算法。反之,當輸入為密文時,經過密碼變換,輸出為明文,這就 是解密交換的過程,此時密碼演算法稱為解密演算法。常用加密演算法為:AES 、 RSA/ECC 、Diffie-hellman 、 SHA-1/SHA-256 。

『伍』 現在常用的數據加密演算法主要有哪些

用資料庫做的md5映射,所以只要他的資料庫里有就輕松的破解了,其實你這個問題我在以前就解決了 你可以在md5的結果里再自己做一下簡單的變換,比如做一次反轉之類的變化 實現起來也很簡單,這樣當人家不知道你在md5上加了反轉 就直接去破解是破不出來的 我寫了一段程序,希望對你有點幫助 import java.security.*; import java.io.*; import java.util.*; import sun.misc.BASE64Encoder; public class MD5 { public static String creatPassword(String password)throws Exception { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(password.getBytes("UTF8")); byte[] digest = md.digest(); /*在這里隨便做點什麼變換就可以了,可以自由發揮了,你也可以寫一個反轉什麼的,我這里就簡單點寫了,注意為了保證md5的碰撞困難,最好不要改變原有的字元集,就是說最好只交換某些字元的位置,不要改變原有的值 還有你在驗證的時候也要按照你發揮的方法寫*/ byte tt=digest[0];digest[0]=digest[7];digest[7]=tt; String outp; outp = new BASE64Encoder().encode(digest); /*順便說一下採用BASE64Encoder編碼後原本是16位的字元變成了24位,其中前22位是有效位,不是我們常見的16位了 這里也和我們用的資料庫破解也不同,變換的過程其實是吧8位的byte只取6位,然後通過加字元長度來實現*/ return outp; } public static void main(String args[])throws Exception{ String md=new MD5().creatPassword("message for test"); System.out.println(md); } } 再給你一段代碼,這段代碼中用到的是一種比較安全的方式,理論是使破解不出來的,因為它使用了隨機鹽對密碼加密,對同樣一段密文加密的兩次結果是不一樣的,但是又同樣能做登錄認證,這樣就沒辦法做資料庫去匹配了,有興趣的話可以研究一下,還有,加密結果是40位 import java.security.*; import java.io.*; import java.util.*; import sun.misc.*; public class MD { //加密 public static String creatPassword(String password)throws Exception { SecureRandom random = new SecureRandom(); byte[] salt = new byte[12]; random.nextBytes(salt); MessageDigest md = MessageDigest.getInstance("MD5"); md.update(salt); md.update(password.getBytes("UTF8")); byte[] digest = md.digest(); String outp=new BASE64Encoder().encode(salt); outp = outp + new BASE64Encoder().encode(digest); return outp; } //認證,gavingPassword是客戶輸入的密碼明文,password是存放的密碼的密文 public static boolean authenticatePassword(String gavingPassword,String password ) throws Exception { String saltString = password.substring(0,16); byte[] salt = new BASE64Decoder().decodeBuffer(saltString); String digest1=password.substring(16); MessageDigest md = MessageDigest.getInstance("MD5"); md.update(salt); md.update(gavingPassword.getBytes("UTF8")); byte[] digest = md.digest(); String digest2 = new BASE64Encoder().encode(digest); if(digest1.equals(digest2)) return true; else return false; } }

『陸』 數據加密原理和演算法是什麼

拜託,數據加密本身是一門很大的學問,不可能只用一兩句話說清楚的。
數據加密的演算法多種多樣,而且隨著科技的發展不斷推陳出新。目前PC上最常用的是rijndael演算法,該演算法已被美國政府採納為標准加密演算法,簡稱AES。在此之前,美國政府採用的是另一種演算法,稱為DES,近年來隨著解密技術的不斷進步,DES已逐漸被淘汰。
加密的原理呢,不同的演算法也各有不同,一般都包括異或、移位、替換等操作。加密演算法大體上分為流水加密和塊式加密兩大類,PC上採用的都是塊式加密,就是把原文分成相同長度的數據塊,例如每32位元組分為一塊,然後對每一塊單獨進行加密。
其他的太多了,說不完,而且我也不完全懂,想學的話你自己買書去看吧。

『柒』 幾種常用加密演算法比較

對稱加密演算法用來對敏感數據等信息進行加密,常用的演算法包括:
des(data
encryption
standard):數據加密標准,速度較快,適用於加密大量數據的場合。
3des(triple
des):是基於des,對一塊數據用三個不同的密鑰進行三次加密,強度更高。
aes(advanced
encryption
standard):高級加密標准,是下一代的加密演算法標准,速度快,安全級別高;

『捌』 加密演算法的常見加密演算法

DES(Data Encryption Standard):對稱演算法,數據加密標准,速度較快,適用於加密大量數據的場合;
3DES(Triple DES):是基於DES的對稱演算法,對一塊數據用三個不同的密鑰進行三次加密,強度更高;
RC2和RC4:對稱演算法,用變長密鑰對大量數據進行加密,比 DES 快;
IDEA(International Data Encryption Algorithm)國際數據加密演算法,使用 128 位密鑰提供非常強的安全性;
RSA:由 RSA 公司發明,是一個支持變長密鑰的公共密鑰演算法,需要加密的文件塊的長度也是可變的,非對稱演算法; 演算法如下:
首先, 找出三個數, p, q, r,其中 p, q 是兩個相異的質數, r 是與 (p-1)(q-1) 互質的數......p, q, r 這三個數便是 private key
接著, 找出 m, 使得 rm == 1 mod (p-1)(q-1).....這個 m 一定存在, 因為 r 與 (p-1)(q-1) 互質, 用輾轉相除法就可以得到了.....再來, 計算 n = pq.......m, n 這兩個數便是 public key
DSA(Digital Signature Algorithm):數字簽名演算法,是一種標準的 DSS(數字簽名標准),嚴格來說不算加密演算法;
AES(Advanced Encryption Standard):高級加密標准,對稱演算法,是下一代的加密演算法標准,速度快,安全級別高,在21世紀AES 標準的一個實現是 Rijndael 演算法;
BLOWFISH,它使用變長的密鑰,長度可達448位,運行速度很快;
MD5:嚴格來說不算加密演算法,只能說是摘要演算法;
對MD5演算法簡要的敘述可以為:MD5以512位分組來處理輸入的信息,且每一分組又被劃分為16個32位子分組,經過了一系列的處理後,演算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成一個128位散列值。
在MD5演算法中,首先需要對信息進行填充,使其位元組長度對512求余的結果等於448。因此,信息的位元組長度(Bits Length)將被擴展至N*512+448,即N*64+56個位元組(Bytes),N為一個正整數。填充的方法如下,在信息的後面填充一個1和無數個0,直到滿足上面的條件時才停止用0對信息的填充。然後,在這個結果後面附加一個以64位二進製表示的填充前信息長度。經過這兩步的處理,如今信息位元組長度=N*512+448+64=(N+1)*512,即長度恰好是512的整數倍。這樣做的原因是為滿足後面處理中對信息長度的要求。(可參見MD5演算法詞條)
PKCS:The Public-Key Cryptography Standards (PKCS)是由美國RSA數據安全公司及其合作夥伴制定的一組公鑰密碼學標准,其中包括證書申請、證書更新、證書作廢表發布、擴展證書內容以及數字簽名、數字信封的格式等方面的一系列相關協議。
SSF33,SSF28,SCB2(SM1):國家密碼局的隱蔽不公開的商用演算法,在國內民用和商用的,除這些都不容許使用外,其他的都可以使用;

『玖』 常用的數據加密演算法有哪些

想要加密電腦內重要文件數據,可以直接使用加密軟體來保護,方法簡單便捷安全。據了解現在市面上的加密軟體都是採用的透明加密,可以對文件進行受控加密,在內部環境是可以正常打開使用的,脫離內部環境則打不開或者亂碼,可以設置禁止拷貝、復制、修改、截屏等。文件外發需要授權,未授權解密無論以任何形式發出都是無法正常打開使用的。還可設置文件外發的瀏覽次數與打開時間。

閱讀全文

與數據加密演算法相關的資料

熱點內容
塊存儲和雲伺服器 瀏覽:348
吃東西的解壓生 瀏覽:916
如何把網頁上傳到web伺服器 瀏覽:243
外國超級解壓實驗 瀏覽:63
pdf閱讀器官方免費下載 瀏覽:46
禁止的命令 瀏覽:963
java設置button的大小設置 瀏覽:451
ios程序員提升方向 瀏覽:528
源碼封庫時引用的庫怎麼處理 瀏覽:524
鯊魚源碼最新版 瀏覽:677
節點是伺服器地址嗎 瀏覽:630
伺服器為什麼不能搬走 瀏覽:315
三年無工作經驗空窗期的程序員 瀏覽:561
來球網app怎麼樣 瀏覽:302
51單片機哈佛 瀏覽:571
無法下載華為移動伺服器地址 瀏覽:679
phplinux重啟命令 瀏覽:110
廈門軟二程序員 瀏覽:580
tv共享文件夾 瀏覽:621
bec詞彙詞根pdf 瀏覽:65