設計加密演算法
⑴ 一種身份認證系統中數據加密演算法的設計 要求:用於身份認證的ID和口令都要進行加密,設計出一種加密演算法。
l iceEncryptText 文本加密解回密答
http://dl.icese.net/src.php?f=iceEncryptText.src.rar
⑵ 根據FEISTEL密碼結構設計一個16位,迭代4輪的加密系統,並已明文為theend為例說明你所設計的加密系統加密
對稱加密演算法
對稱加密演算法是應用較早的加密演算法,技術成熟。在對稱加密演算法中,數據發信方將明文(原始數據)和加密密鑰一起經過特殊加密演算法處理後,使其變成復雜的加密密文發送出去。收信方收到密文後,若想解讀原文,則需要使用加密用過的密鑰及相同演算法的逆演算法對密文進行解密,才能使其恢復成可讀明文。在對稱加密演算法中,使用的密鑰只有一個,發收信雙方都使用這個密鑰對數據進行加密和解密,這就要求解密方事先必須知道加密密鑰。
對稱加密演算法的特點是演算法公開、計算量小、加密速度快、加密效率高。不足之處是,交易雙方都使用同樣鑰匙,安全性得不到保證。此外,每對用戶每次使用對稱加密演算法時,都需要使用其他人不知道的惟一鑰匙,這會使得發收信雙方所擁有的鑰匙數量成幾何級數增長,密鑰管理成為用戶的負擔。對稱加密演算法在分布式網路系統上使用較為困難,主要是因為密鑰管理困難,使用成本較高。在計算機專網系統中廣泛使用的對稱加密演算法有DES、IDEA和AES。
不對稱加密演算法
不對稱加密演算法使用兩把完全不同但又是完全匹配的一對鑰匙—公鑰和私鑰。在使用不對稱加密演算法加密文件時,只有使用匹配的一對公鑰和私鑰,才能完成對明文的加密和解密過程。加密明文時採用公鑰加密,解密密文時使用私鑰才能完成,而且發信方(加密者)知道收信方的公鑰,只有收信方(解密者)才是唯一知道自己私鑰的人。不對稱加密演算法的基本原理是,如果發信方想發送只有收信方才能解讀的加密信息,發信方必須首先知道收信方的公鑰,然後利用收信方的公鑰來加密原文;收信方收到加密密文後,使用自己的私鑰才能解密密文。顯然,採用不對稱加密演算法,收發信雙方在通信之前,收信方必須將自己早已隨機生成的公鑰送給發信方,而自己保留私鑰。由於不對稱演算法擁有兩個密鑰,因而特別適用於分布式系統中的數據加密。廣泛應用的不對稱加密演算法有RSA演算法和美國國家標准局提出的DSA。以不對稱加密演算法為基礎的加密技術應用非常廣泛。
最早的公鑰演算法是有凱撒大帝發明的,所以也叫凱撒演算法,凱撒演算法是很簡單的演算法,它的學名是「單表替換演算法」。就如同這個演算法名稱的字面意思一樣,他把一個字母替換成另一個字母,比如:把 "a" 替換成 "b", "c" 替換成 "d" 以此類推, 直到把 "z" 替換成 "a",這里每個字母都備下一個字母替換,所以密鑰就是1(如果密鑰是2則把 "a" 替換成 "c")。
它不是對稱加密演算法!
⑶ 設計一個密鑰加密演算法
評什麼人家要幫你設計呢?
⑷ 用JAVA設計一個簡單的加密、解密演算法,用該演算法來實現對數據的加密、解密
簡單的?
用異或就可以了..!
importjava.util.Scanner;
publicclass加密
{
privatestaticScannersc=newScanner(System.in);
publicstaticvoidmain(String[]Args)
{
.out.println(" ================字元串加密演示===================== ");
init();
}
//初始化!
privatestaticvoidinit()
{
for(;;)
{
char[]arr=input();
jiaMi(arr,20140908);
jiaMi(20140908,arr);
}
}
//鍵盤錄取!
privatestaticchar[]input()
{
Strings=sc.nextLine();
inta=s.length();
char[]arr=newchar[a];
//char[]arr=s.toCharArray();
for(inti=0;i<s.length();i++)
{
arr[i]=s.charAt(i);
}
returnarr;
}
//加密!!
privatestaticvoidjiaMi(char[]arr,inta)
{
for(inti=0;i<arr.length;i++)
{
arr[i]=((char)(arr[i]^a));
}
System.out.println("加密完成!");
print(arr);
}
//解密!!
privatestaticvoidjiaMi(inta,char[]arr)
{
for(inti=0;i<arr.length;i++)
{
arr[i]=((char)(arr[i]^a));
}
System.out.println("解密完成");
print(arr);
}
//列印!!
privatestaticvoidprint(char[]arr)
{
for(inti=0;i<arr.length;i++)
{
System.out.print(arr[i]);
}
System.out.println(" ========================= ");
}
}
⑸ 用c語言設計一個簡單地加密算,解密演算法,並說明其中的原理
恰巧這兩天剛看的一種思路,很簡單的加密解密演算法,我說一下吧。
演算法原理很簡專單,假設你的原密碼是A,用A與數屬B按位異或後得到C,C就是加密後的密碼,用C再與數B按位異或後能得回A。即(A異或B)異或B=A。用C實現很簡單的。
這就相當於,你用原密碼A和特定數字B產生加密密碼C,別人拿到這個加密的密碼C,如果不知道特定的數字B,他是無法解密得到原密碼A的。
對於密碼是數字的情況可以用下面的代碼:
#include <stdio.h>
#define BIRTHDAY 19880314
int main()
{
long a, b;
scanf("%ld", &a);
printf("原密碼:%ld\n", a);
b = BIRTHDAY;
a ^= b;
printf("加密密碼:%ld\n", a);
a ^= b; printf("解密密碼:%ld\n", a);
return 0;
}
如果密碼是字元串的話,最簡單的加密演算法就是對每個字元重新映射,只要加密解密雙方共同遵守同一個映射規則就行啦。
⑹ 用c語言設計一個簡單地加密算,解密演算法,並說明其中的原理
題目標題:神秘的字元加、解密技術。
題目描述:
插入式加密法是信息加密中一種簡單的加密技術,其方法是在明文字元中插入一些無意義的字母來形成密文單詞。例如,對於明文:China,在間隔為1的位置依次插入一個字母而形成密文:Coheifnia。因此,其解密過程與加密過程相反,即從密文中首字元開始取,每間隔1個位置依次取出字元,就得到原始的明文。請編程實現插入式加密法所對應的解密演算法,將密文翻譯成明文。
提示:定義兩個字元數組ci和pl,分別存放密文字元串和明文字元串。解密過程即在字元串ci中,從下標0的字元(首字元)開始,將偶數下標的字元(』\0』之前的)依次取出賦值到字元數組pl中,最後即得到明文字元串。
輸入描述:輸入一行:密文字元串。
輸出描述:輸出有一行:翻譯後的明文字元串。
樣例輸入:
Coheifnia
樣例輸出:
China
答案:
#include <iostream>
using namespace std;
int main( )
{
char ci[81],pl[81];
int j,k;
cin>>ci;
for(j=k=0;ci[j]!='\0';j++)
if(j%2==0)
{
pl[k]=ci[j];
k++;
}
pl[k]='\0';
cout<<pl<<endl;
return 0;
}
⑺ 用c語言設計了一個加密演算法:用a代替z,用b代替y,用c代替x,……,用z代替a。
#include
<stdio.h>
int
main()
{
char
s[100],*p;
printf("請輸入字元串
:
");
gets(s);
p
=
s;
while(*p)
{
if((*p
>=
'a')
&&
(*p
<=
'z'))
/*處理小寫*/
{
*p
='z'
-
*p
+
'a';
}
if((*p
>=
'A')
&&
(*p
<=
'Z'))
/*處理大寫,同理處理數字亦版一樣..自己例推*/
{
*p
='Z'
-
*p
+
'A';
}
p++;
}
printf("轉換後權的字元串為
:
%s\n\n",s);
return
0;
}
⑻ 6.設計一個加密解密程序。輸入一串字元,使用加密演算法,對其加密。再設計解密演算法,對其解密。
#include<stdio.h>
intmain()
{chars[200];
inti;
gets(s);
for(i=0;s[i];i++)
s[i]+=i%5+1;
printf("加密抄後:
%s
",s);
for(i=0;s[i];i++)
s[i]-=i%5+1;
printf("解密後:
%s
",s);
return0;
}
PrivateSubCommand1_Click()
s=InputBox("請輸入要加密的字元串:")
Print"輸入的字元串是:"
Prints
Fori=1ToLen(s)
Mid(s,i,1)=Chr(Asc(Mid(s,i,1))+iMod5+1)
Nexti
Print
Print"加密後的串:"
Prints
Fori=1ToLen(s)
Mid(s,i,1)=Chr(Asc(Mid(s,i,1))-iMod5-1)
Nexti
Print
Print"解密後的串:"
Prints
EndSub
⑼ u盤加密演算法的設計與實現
加密U盤最簡單的方法就是使用U盤超級加密3000
U盤超級加密3000是一款專業的U盤加回密軟體,可以答加密任意文件夾,並且支持硬碟加密。
U盤超級加密3000操作簡單,免安裝,只要下載U盤超級加密3000到您指定的U盤就可以了。
⑽ 設計一個簡單的數據加密演算法
// 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 { IDD = IDD_ABOUTBOX };
//}}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;
}