密碼編譯演算法的分類:
1.對稱式加密 DES,AES
2.非對稱式加密 RSA, DSA,
3.單向加密 MD5, SHA
對稱式加密的特點:
1.雙方使用相同的密鑰,解密方事先必須知道加密金鑰
2. 加密時使用什麼密鑰,解密時必須使用相同的密鑰
3. 對同樣的資訊,使用不同的密鑰,加密結果理論上不相同
在DES中,使用了一個56位的密鑰以及附加的8為同位位元,慘升最大64位的分組大小。攻擊DES,一般只能使用窮舉的密鑰搜尋,即重複嘗試各種密鑰直到有一個符合為止。
3DES,即三重DES,是DES的加強版,也是DES的一個更安全的變形,它使用了3條56位的金鑰組資料進行三次加密,一般情況下,提供較強的安全性。
加密步驟:
1.指明機密演算法的提供機構
Security.addProvider(new com.sun.crypto.provider.SunJce());
2. 執行個體化一個金鑰產生器
KeyGenerator keygen = KeyGenerator.getInstance("DESede");
3.產生密鑰
SecretKey desKey = keygen.generateKey();
4.定義一個Cipher對象,用他來加密、解密
Cipher c = Cipher.getInstance("DESede");
5. 對Cipher對象初始化,指明密鑰,加密/解密模式
c.init( Cipher.ENCRYPT_MODE, deskey);
6. 加密需要將明文轉換成byte流
byte[] src = msg.getBytes();
byte[] enc = c.doFinal();
7.輸出加密資訊,位元組流轉換成字串 String result = String(enc);
非對稱機密:
在非對稱式加密演算法過程中,接受方產生一個公開密鑰和一個私人密鑰,前者公開,發送方將明文用接收方的公開密鑰進行處理,變成米問發送出去,接收方接到密文後,使用自己的私人密鑰堆密文解密,恢複為明文。
加密過程和解密過程幾乎和DES類似,只是在產生密鑰的時候,產生一對密鑰,公開金鑰用於加密,私密金鑰用於解密。
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
KeyPairGen.initizlize(1024);
KeyPair keyPair = KeyPairGen.generateKeyPair();
RSAPrivateKey privateKey = (RSAPrivateKey)keyPair.getPrivate();
RSAPublicKey publickey = (RSAPublicKey)keyPair.getPublic();
單向密碼編譯演算法的特點:
1. 密碼編譯演算法對同一訊息反覆執行該函數總得到相同的定義
2. 密碼編譯演算法產生的密文是不可預見的,密文看起來和明文沒有任何關係
3. 明文的任何微小變化都會對產生的密文產生很大的影響
4. 具有無法復原性
步驟:
1. 根據MD5演算法產生MessageDigest對象
2. 更新摘要
3. 完成雜湊計算,得到結果
SHA加密和MD5是一樣的。