設定解密演算法
① RSA加解密演算法,該怎麼解決怎麼解決
在公開密鑰密碼體制中,加密密鑰(即公開密鑰)PK是公開信息,而解密密鑰(即秘密密鑰)SK是需要保密的。加密演算法E和解密演算法D也都是公開的。雖然密鑰SK是由公開密鑰PK決定的,但卻不能根據PK計算出SK。正是基於這種理論,1978年出現了著名的RSA演算法,它通常是先生成一對RSA 密鑰,其中之一是保密密鑰,由用戶保存;另一個為公開密鑰,可對外公開,甚至可在網路伺服器中注冊。為提高保密強度,RSA密鑰至少為500位長,一般推薦使用1024位。這就使加密的計算量很大。為減少計算量,在傳送信息時,常採用傳統加密方法 與公開密鑰加密方法相結合的方式,即信息採用改進的DES或IDEA對話密鑰加密,然後使用RSA密鑰加密對話密鑰和信息摘要。對方收到信息後,用不同的 密鑰解密並可核對信息摘要。
② 初學者,求高手給一個完整的AES加密解密演算法的程序(C/C++) 希望能滿足如下要求
/*128bits密鑰長度及分組長度AES加解密代碼
*作者:Jeffrey.zhu
*/
③ 加密解密演算法
welcome to guangzhou hongmeng !
import java.io.*;
public class suanfa1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自動生成方法存根
File file=new File("1.txt");
System.out.println(file.length()/12);
int x[]=new int[3];
try{
BufferedReader in=new BufferedReader(new FileReader(file));
char xxx[][]=new char[1000][4];
int i=0;
while(in.read(xxx[i])==4)
{
i++;
}
int j=i,xy=0;
suanfa2 xx[]=new suanfa2[j/3];
for(i=0;i<j;i+=3,xy++)
{
for(int k=i,xz=0;k<i+3;k++,xz++)
x[xz]=Integer.parseInt(new String(xxx[k]));
xx[xy]=new suanfa2(x[0],x[1],x[2]);
//System.out.println("實際位置:"+xx[xy].wei1);
System.out.print(xx[xy].zifu1);
}
suanfa1.sort1(xx);
for(i=0;i<xy;i++)
System.out.print(xx[i].zifu1);
}
catch(IOException e){}
}
public static void sort1(suanfa2 xyz[])
{
int length=xyz.length;
for(int x=1;x<length;x++)
{
int k=x-1;
for(int i=x;i<length;i++)
if(xyz[i].wei1<xyz[k].wei1)
{
suanfa2 xx;
xx=xyz[i];
xyz[i]=xyz[k];
xyz[k]=xx;
}
}
}
}
public class suanfa2 {
int suanzi;//加密運算元
int wei;//表示這個字元在整個字元串中的位置(加密),
int zifu;//表示加密過的字元(ASCII碼值)。
char zifu1;//被加密的字元
int wei1;//實際的位置
public suanfa2(int x,int y,int z)
{
// TODO 自動生成構造函數存根
this.suanzi=x;
this.wei=y;
this.zifu=z;
wei1=this.getSJwei();
zifu1=this.getZifu();
}
int getSJwei()
{
return wei-suanzi;
}
char getZifu()
{
return (char)(zifu+suanzi);
}
}
1.txt
48-016--019---01600130048-01800120051006800680051
④ 加密解密字元串的演算法原理
我們經常需要一種措施來保護我們的數據,防止被一些懷有不良用心的人所看到或者破壞。在信息時代,信息可以幫助團體或個人,使他們受益,同樣,信息也可以用來對他們構成威脅,造成破壞。在競爭激烈的大公司中,工業間諜經常會獲取對方的情報。因此,在客觀上就需要一種強有力的安全措施來保護機密數據不被竊取或篡改。數據加密與解密從宏觀上講是非常簡單的,很容易理解。加密與解密的一些方法是非常直接的,很容易掌握,可以很方便的對機密數據進行加密和解密。
一:數據加密方法
在傳統上,我們有幾種方法來加密數據流。所有這些方法都可以用軟體很容易的實現,但是當我們只知道密文的時候,是不容易破譯這些加密演算法的(當同時有原文和密文時,破譯加密演算法雖然也不是很容易,但已經是可能的了)。最好的加密演算法對系統性能幾乎沒有影響,並且還可以帶來其他內在的優點。例如,大家都知道的pkzip,它既壓縮數據又加密數據。又如,dbms的一些軟體包總是包含一些加密方法以使復制文件這一功能對一些敏感數據是無效的,或者需要用戶的密碼。所有這些加密演算法都要有高效的加密和解密能力。
幸運的是,在所有的加密演算法中最簡單的一種就是「置換表」演算法,這種演算法也能很好達到加密的需要。每一個數據段(總是一個位元組)對應著「置換表」中的一個偏移量,偏移量所對應的值就輸出成為加密後的文件。加密程序和解密程序都需要一個這樣的「置換表」。事實上,80x86 cpu系列就有一個指令『xlat』在硬體級來完成這樣的工作。這種加密演算法比較簡單,加密解密速度都很快,但是一旦這個「置換表」被對方獲得,那這個加密方案就完全被識破了。更進一步講,這種加密演算法對於黑客破譯來講是相當直接的,只要找到一個「置換表」就可以了。這種方法在計算機出現之前就已經被廣泛的使用。
對這種「置換表」方式的一個改進就是使用2個或者更多的「置換表」,這些表都是基於數據流中位元組的位置的,或者基於數據流本身。這時,破譯變的更加困難,因為黑客必須正確的做幾次變換。通過使用更多的「置換表」,並且按偽隨機的方式使用每個表,這種改進的加密方法已經變的很難破譯。比如,我們可以對所有的偶數位置的數據使用a表,對所有的奇數位置使用b表,即使黑客獲得了明文和密文,他想破譯這個加密方案也是非常困難的,除非黑客確切的知道用了兩張表。
與使用「置換表」相類似,「變換數據位置」也在計算機加密中使用。但是,這需要更多的執行時間。從輸入中讀入明文放到一個buffer中,再在buffer中對他們重排序,然後按這個順序再輸出。解密程序按相反的順序還原數據。這種方法總是和一些別的加密演算法混合使用,這就使得破譯變的特別的困難,幾乎有些不可能了。例如,有這樣一個詞,變換起字母的順序,slient 可以變為listen,但所有的字母都沒有變化,沒有增加也沒有減少,但是字母之間的順序已經變化了。
但是,還有一種更好的加密演算法,只有計算機可以做,就是字/位元組循環移位和xor操作。如果我們把一個字或位元組在一個數據流內做循環移位,使用多個或變化的方向(左移或右移),就可以迅速的產生一個加密的數據流。這種方法是很好的,破譯它就更加困難!而且,更進一步的是,如果再使用xor操作,按位做異或操作,就就使破譯密碼更加困難了。如果再使用偽隨機的方法,這涉及到要產生一系列的數字,我們可以使用fibbonaci數列。對數列所產生的數做模運算(例如模3),得到一個結果,然後循環移位這個結果的次數,將使破譯次密碼變的幾乎不可能!但是,使用fibbonaci數列這種偽隨機的方式所產生的密碼對我們的解密程序來講是非常容易的。
在一些情況下,我們想能夠知道數據是否已經被篡改了或被破壞了,這時就需要產生一些校驗碼,並且把這些校驗碼插入到數據流中。這樣做對數據的防偽與程序本身都是有好處的。但是感染計算機程序的病毒才不會在意這些數據或程序是否加過密,是否有數字簽名。所以,加密程序在每次load到內存要開始執行時,都要檢查一下本身是否被病毒感染,對與需要加、解密的文件都要做這種檢查!很自然,這樣一種方法體制應該保密的,因為病毒程序的編寫者將會利用這些來破壞別人的程序或數據。因此,在一些反病毒或殺病毒軟體中一定要使用加密技術。
循環冗餘校驗是一種典型的校驗數據的方法。對於每一個數據塊,它使用位循環移位和xor操作來產生一個16位或32位的校驗和 ,這使得丟失一位或兩個位的錯誤一定會導致校驗和出錯。這種方式很久以來就應用於文件的傳輸,例如 xmodem-crc。 這是方法已經成為標准,而且有詳細的文檔。但是,基於標准crc演算法的一種修改演算法對於發現加密數據塊中的錯誤和文件是否被病毒感染是很有效的。
二.基於公鑰的加密演算法
一個好的加密演算法的重要特點之一是具有這種能力:可以指定一個密碼或密鑰,並用它來加密明文,不同的密碼或密鑰產生不同的密文。這又分為兩種方式:對稱密鑰演算法和非對稱密鑰演算法。所謂對稱密鑰演算法就是加密解密都使用相同的密鑰,非對稱密鑰演算法就是加密解密使用不同的密鑰。非常著名的pgp公鑰加密以及rsa加密方法都是非對稱加密演算法。加密密鑰,即公鑰,與解密密鑰,即私鑰,是非常的不同的。從數學理論上講,幾乎沒有真正不可逆的演算法存在。例如,對於一個輸入『a』執行一個操作得到結果『b』,那麼我們可以基於『b』,做一個相對應的操作,導出輸入『a』。在一些情況下,對於每一種操作,我們可以得到一個確定的值,或者該操作沒有定義(比如,除數為0)。對於一個沒有定義的操作來講,基於加密演算法,可以成功地防止把一個公鑰變換成為私鑰。因此,要想破譯非對稱加密演算法,找到那個唯一的密鑰,唯一的方法只能是反復的試驗,而這需要大量的處理時間。
rsa加密演算法使用了兩個非常大的素數來產生公鑰和私鑰。即使從一個公鑰中通過因數分解可以得到私鑰,但這個運算所包含的計算量是非常巨大的,以至於在現實上是不可行的。加密演算法本身也是很慢的,這使得使用rsa演算法加密大量的數據變的有些不可行。這就使得一些現實中加密演算法都基於rsa加密演算法。pgp演算法(以及大多數基於rsa演算法的加密方法)使用公鑰來加密一個對稱加密演算法的密鑰,然後再利用一個快速的對稱加密演算法來加密數據。這個對稱演算法的密鑰是隨機產生的,是保密的,因此,得到這個密鑰的唯一方法就是使用私鑰來解密。
我們舉一個例子:假定現在要加密一些數據使用密鑰『12345』。利用rsa公鑰,使用rsa演算法加密這個密鑰『12345』,並把它放在要加密的數據的前面(可能後面跟著一個分割符或文件長度,以區分數據和密鑰),然後,使用對稱加密演算法加密正文,使用的密鑰就是『12345』。當對方收到時,解密程序找到加密過的密鑰,並利用rsa私鑰解密出來,然後再確定出數據的開始位置,利用密鑰『12345』來解密數據。這樣就使得一個可靠的經過高效加密的數據安全地傳輸和解密。
一些簡單的基於rsa演算法的加密演算法可在下面的站點找到:
ftp://ftp.funet.fi/pub/crypt/cryptography/asymmetric/rsa
三.一個嶄新的多步加密演算法
現在又出現了一種新的加密演算法,據說是幾乎不可能被破譯的。這個演算法在1998年6月1日才正式公布的。下面詳細的介紹這個演算法:
使用一系列的數字(比如說128位密鑰),來產生一個可重復的但高度隨機化的偽隨機的數字的序列。一次使用256個表項,使用隨機數序列來產生密碼轉表,如下所示:
把256個隨機數放在一個距陣中,然後對他們進行排序,使用這樣一種方式(我們要記住最初的位置)使用最初的位置來產生一個表,隨意排序的表,表中的數字在0到255之間。如果不是很明白如何來做,就可以不管它。但是,下面也提供了一些原碼(在下面)是我們明白是如何來做的。現在,產生了一個具體的256位元組的表。讓這個隨機數產生器接著來產生這個表中的其餘的數,以至於每個表是不同的。下一步,使用"shotgun technique"技術來產生解碼表。基本上說,如果 a映射到b,那麼b一定可以映射到a,所以b[a[n]] = n.(n是一個在0到255之間的數)。在一個循環中賦值,使用一個256位元組的解碼表它對應於我們剛才在上一步產生的256位元組的加密表。
使用這個方法,已經可以產生這樣的一個表,表的順序是隨機,所以產生這256個位元組的隨機數使用的是二次偽隨機,使用了兩個額外的16位的密碼.現在,已經有了兩張轉換表,基本的加密解密是如下這樣工作的。前一個位元組密文是這個256位元組的表的索引。或者,為了提高加密效果,可以使用多餘8位的值,甚至使用校驗和或者crc演算法來產生索引位元組。假定這個表是256*256的數組,將會是下面的樣子:
crypto1 = a[crypto0][value]
變數'crypto1'是加密後的數據,'crypto0'是前一個加密數據(或著是前面幾個加密數據的一個函數值)。很自然的,第一個數據需要一個「種子」,這個「種子」 是我們必須記住的。如果使用256*256的表,這樣做將會增加密文的長度。或者,可以使用你產生出隨機數序列所用的密碼,也可能是它的crc校驗和。順便提及的是曾作過這樣一個測試: 使用16個位元組來產生表的索引,以128位的密鑰作為這16個位元組的初始的"種子"。然後,在產生出這些隨機數的表之後,就可以用來加密數據,速度達到每秒鍾100k個位元組。一定要保證在加密與解密時都使用加密的值作為表的索引,而且這兩次一定要匹配。
加密時所產生的偽隨機序列是很隨意的,可以設計成想要的任何序列。沒有關於這個隨機序列的詳細的信息,解密密文是不現實的。例如:一些ascii碼的序列,如「eeeeeeee"可能被轉化成一些隨機的沒有任何意義的亂碼,每一個位元組都依賴於其前一個位元組的密文,而不是實際的值。對於任一個單個的字元的這種變換來說,隱藏了加密數據的有效的真正的長度。
如果確實不理解如何來產生一個隨機數序列,就考慮fibbonacci數列,使用2個雙字(64位)的數作為產生隨機數的種子,再加上第三個雙字來做xor操作。 這個演算法產生了一系列的隨機數。演算法如下:
unsigned long dw1, dw2, dw3, dwmask;
int i1;
unsigned long arandom[256];
dw1 = {seed #1};
dw2 = {seed #2};
dwmask = {seed #3};
// this gives you 3 32-bit "seeds", or 96 bits total
for(i1=0; i1 < 256; i1++)
{
dw3 = (dw1 + dw2) ^ dwmask;
arandom[i1] = dw3;
dw1 = dw2;
dw2 = dw3;
}
如果想產生一系列的隨機數字,比如說,在0和列表中所有的隨機數之間的一些數,就可以使用下面的方法:
int __cdecl mysortproc(void *p1, void *p2)
{
unsigned long **pp1 = (unsigned long **)p1;
unsigned long **pp2 = (unsigned long **)p2;
if(**pp1 < **pp2)
return(-1);
else if(**pp1 > *pp2)
return(1);
return(0);
}
...
int i1;
unsigned long *aprandom[256];
unsigned long arandom[256]; // same array as before, in this case
int aresult[256]; // results go here
for(i1=0; i1 < 256; i1++)
{
aprandom[i1] = arandom + i1;
}
// now sort it
qsort(aprandom, 256, sizeof(*aprandom), mysortproc);
// final step - offsets for pointers are placed into output array
for(i1=0; i1 < 256; i1++)
{
aresult[i1] = (int)(aprandom[i1] - arandom);
}
...
變數'aresult'中的值應該是一個排過序的唯一的一系列的整數的數組,整數的值的范圍均在0到255之間。這樣一個數組是非常有用的,例如:對一個位元組對位元組的轉換表,就可以很容易並且非常可靠的來產生一個短的密鑰(經常作為一些隨機數的種子)。這樣一個表還有其他的用處,比如說:來產生一個隨機的字元,計算機游戲中一個物體的隨機的位置等等。上面的例子就其本身而言並沒有構成一個加密演算法,只是加密演算法一個組成部分。
作為一個測試,開發了一個應用程序來測試上面所描述的加密演算法。程序本身都經過了幾次的優化和修改,來提高隨機數的真正的隨機性和防止會產生一些短的可重復的用於加密的隨機數。用這個程序來加密一個文件,破解這個文件可能會需要非常巨大的時間以至於在現實上是不可能的。
四.結論:
由於在現實生活中,我們要確保一些敏感的數據只能被有相應許可權的人看到,要確保信息在傳輸的過程中不會被篡改,截取,這就需要很多的安全系統大量的應用於政府、大公司以及個人系統。數據加密是肯定可以被破解的,但我們所想要的是一個特定時期的安全,也就是說,密文的破解應該是足夠的困難,在現實上是不可能的,尤其是短時間內。
⑤ 求vb文本文件加解密演算法,可設定密鑰
這個簡單,比如字母a加密:
y=a的asc值
xor
i
解密:
a的asc值=y
xor
i
i是種子自己知道就行了
xor是異或運算,先用異或運算得到加密後的數據,要是把加密後的數據在異或同一個數就會還原成原來得數據這就是解密。怎麼樣神奇把,還有數據在寫入文件時最好把y轉換成字元串一行一行的寫入,因為中文是兩個位元組英文是一個位元組asc值有很大的不同加密後數據會亂的所以y要用str()函數轉換成由數字組成的字元串。
⑥ 計算機加密解密演算法
用Java實現RSA加密 package net.52java.utils.security; import javax.crypto.Cipher; import java.security.*; import java.security.spec.RSAPublicKeySpec; import java.security.spec.RSAPrivateKeySpec; import java.security.spec.InvalidKeySpecException; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.io.*; import java.math.BigInteger; /** * RSA 工具類。提供加密,解密,生成密鑰對等方法。 * 需要到 http://www.bouncycastle.org下載bcprov-jdk14-123.jar。 * @author xiaoyusong * mail: [email protected] * msn:[email protected] * @since 2004-5-20 * */ public class RSA{ /** * 生成密鑰對 * @return KeyPair * @throws Exception */ public static KeyPair generateKeyPair() throws Exception { try { KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA", new org.bouncycastle.jce.provider.BouncyCastleProvider()); final int KEY_SIZE = 1024;//沒什麼好說的了,這個值關繫到塊加密的大小,可以更改,但是不要太大,否則效率會低 keyPairGen.initialize(KEY_SIZE, new SecureRandom()); KeyPair keyPair = keyPairGen.genKeyPair(); return keyPair; } catch (Exception e) { throw new Exception(e.getMessage()); } } /** * 生成公鑰 * @param molus * @param publicExponent * @return RSAPublicKey * @throws Exception */ public static RSAPublicKey generateRSAPublicKey(byte[] molus, byte[] publicExponent) throws Exception { KeyFactory keyFac = null; try { keyFac = KeyFactory.getInstance("RSA", new org.bouncycastle.jce.provider.BouncyCastleProvider()); } catch (NoSuchAlgorithmException ex) { throw new Exception(ex.getMessage()); } RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(new BigInteger(molus), new BigInteger(publicExponent)); try { return (RSAPublicKey) keyFac.generatePublic(pubKeySpec); } catch (InvalidKeySpecException ex) { throw new Exception(ex.getMessage()); } }
⑦ JAVA使用什麼加密演算法和解密演算法好
簡單的Java加密演算法有:
第一種. BASE
Base是網路上最常見的用於傳輸Bit位元組代碼的編碼方式之一,大家可以查看RFC~RFC,上面有MIME的詳細規范。Base編碼可用於在HTTP環境下傳遞較長的標識信息。例如,在Java Persistence系統Hibernate中,就採用了Base來將一個較長的唯一標識符(一般為-bit的UUID)編碼為一個字元串,用作HTTP表單和HTTP GET URL中的參數。在其他應用程序中,也常常需要把二進制數據編碼為適合放在URL(包括隱藏表單域)中的形式。此時,採用Base編碼具有不可讀性,即所編碼的數據不會被人用肉眼所直接看到。
第二種. MD
MD即Message-Digest Algorithm (信息-摘要演算法),用於確保信息傳輸完整一致。是計算機廣泛使用的雜湊演算法之一(又譯摘要演算法、哈希演算法),主流編程語言普遍已有MD實現。將數據(如漢字)運算為另一固定長度值,是雜湊演算法的基礎原理,MD的前身有MD、MD和MD。廣泛用於加密和解密技術,常用於文件校驗。校驗?不管文件多大,經過MD後都能生成唯一的MD值。好比現在的ISO校驗,都是MD校驗。怎麼用?當然是把ISO經過MD後產生MD的值。一般下載linux-ISO的朋友都見過下載鏈接旁邊放著MD的串。就是用來驗證文件是否一致的。
MD演算法具有以下特點:
壓縮性:任意長度的數據,算出的MD值長度都是固定的。
容易計算:從原數據計算出MD值很容易。
抗修改性:對原數據進行任何改動,哪怕只修改個位元組,所得到的MD值都有很大區別。
弱抗碰撞:已知原數據和其MD值,想找到一個具有相同MD值的數據(即偽造數據)是非常困難的。
強抗碰撞:想找到兩個不同的數據,使它們具有相同的MD值,是非常困難的。
MD的作用是讓大容量信息在用數字簽名軟體簽署私人密鑰前被」壓縮」成一種保密的格式(就是把一個任意長度的位元組串變換成一定長的十六進制數字串)。除了MD以外,其中比較有名的還有sha-、RIPEMD以及Haval等。
第三種.SHA
安全哈希演算法(Secure Hash Algorithm)主要適用於數字簽名標准(Digital Signature Standard DSS)裡面定義的數字簽名演算法(Digital Signature Algorithm DSA)。對於長度小於^位的消息,SHA會產生一個位的消息摘要。該演算法經過加密專家多年來的發展和改進已日益完善,並被廣泛使用。該演算法的思想是接收一段明文,然後以一種不可逆的方式將它轉換成一段(通常更小)密文,也可以簡單的理解為取一串輸入碼(稱為預映射或信息),並把它們轉化為長度較短、位數固定的輸出序列即散列值(也稱為信息摘要或信息認證代碼)的過程。散列函數值可以說是對明文的一種「指紋」或是「摘要」所以對散列值的數字簽名就可以視為對此明文的數字簽名。
SHA-與MD的比較
因為二者均由MD導出,SHA-和MD彼此很相似。相應的,他們的強度和其他特性也是相似,但還有以下幾點不同:
對強行攻擊的安全性:最顯著和最重要的區別是SHA-摘要比MD摘要長 位。使用強行技術,產生任何一個報文使其摘要等於給定報摘要的難度對MD是^數量級的操作,而對SHA-則是^數量級的操作。這樣,SHA-對強行攻擊有更大的強度。
對密碼分析的安全性:由於MD的設計,易受密碼分析的攻擊,SHA-顯得不易受這樣的攻擊。
速度:在相同的硬體上,SHA-的運行速度比MD慢。
第四種.HMAC
HMAC(Hash Message Authentication Code,散列消息鑒別碼,基於密鑰的Hash演算法的認證協議。消息鑒別碼實現鑒別的原理是,用公開函數和密鑰產生一個固定長度的值作為認證標識,用這個標識鑒別消息的完整性。使用一個密鑰生成一個固定大小的小數據塊,即MAC,並將其加入到消息中,然後傳輸。接收方利用與發送方共享的密鑰進行鑒別認證等。
⑧ 用JAVA設計一個簡單的加密、解密演算法,用該演算法來實現對數據的加密、解密
給你個MD5的加密演算法
package test;
import java.security.MessageDigest;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author unascribed
* @version 1.0
*/
public class StringUtil {
private final static String[] hexDigits = {
"0", "1", "2", "3", "4", "5", "6", "7",
"8", "9", "a", "b", "c", "d", "e", "f"};
/**
* 轉換位元組數組為16進制字串
* @param b 位元組數組
* @return 16進制字串
*/
public static String byteArrayToHexString(byte[] b) {
StringBuffer resultSb = new StringBuffer();
for (int i = 0; i < b.length; i++) {
resultSb.append(byteToHexString(b[i]));
}
return resultSb.toString();
}
private static String byteToHexString(byte b) {
int n = b;
if (n < 0)
n = 256 + n;
int d1 = n / 16;
int d2 = n % 16;
return hexDigits[d1] + hexDigits[d2];
}
public static String MD5Encode(String origin) {
String resultString = null;
try {
resultString=new String(origin);
MessageDigest md = MessageDigest.getInstance("MD5");
resultString=byteArrayToHexString(md.digest(resultString.getBytes()));
}
catch (Exception ex) {
}
return resultString;
}
public static void main(String[] args){
System.err.println(MD5Encode("a"));
}
}
在RFC 1321中,給出了Test suite用來檢驗你的實現是否正確:
MD5 ("") =
MD5 ("a") =
MD5 ("abc") =
MD5 ("message digest") =
MD5 ("abcdefghijklmnopqrstuvwxyz") =
⑨ 簡述DES演算法與RAS演算法加密與解密的思想
DES是一種單一密鑰加解密演算法.通信主體只有一個密鑰,該密鑰部隊第三方公開.RSA則是公鑰/私鑰系統.該系統比DES系統更原子化,具有普遍應用意義. nDES演算法利用一個56+8奇偶校驗位(第8, 16, 24, 32, 40, 48, 56, 64位)=64位的密鑰對以64位為單位的塊數據進行加解密. 第一步:生成16個子鑰(48位)第二步:用子鑰對64位數據加密RSA具體演算法如下:隨機選定兩個大素數p, q.