因此找到了使用 Tripple DES的方式加密字串。
1. 首先,先寄建立Decrypter與Encrypter
package security.crypto;
import java.io.UnsupportedEncodingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.SecretKey;
public classDecrypter {
Cipher decipher;
public Decrypter(SecretKey key) {
try {
decipher = Cipher.getInstance("DESede");
decipher.init(Cipher.DECRYPT_MODE, key);
} catch (javax.crypto.NoSuchPaddingException e) {
e.printStackTrace();
} catch (java.security.NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (java.security.InvalidKeyException e) {
e.printStackTrace();
}
}
public String decrypt(String str) {
try {
byte[] decipher1 = new sun.misc.BASE64Decoder().decodeBuffer(str);
byte[] decryptedBytes = decipher.doFinal(decipher1);
return new String(decryptedBytes, "UTF8");
} catch (javax.crypto.BadPaddingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (java.io.IOException e) {
e.printStackTrace();
}
return null;
}
}
package security.crypto;
import java.io.UnsupportedEncodingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.SecretKey;
import sun.misc.BASE64Encoder;
public class Encrypter {
private Cipher encipher;
public Encrypter(SecretKey key) {
try {
encipher = Cipher.getInstance("DESede");
encipher.init(Cipher.ENCRYPT_MODE, key);
} catch (javax.crypto.NoSuchPaddingException e) {
e.printStackTrace();
} catch (java.security.NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (java.security.InvalidKeyException e) {
e.printStackTrace();
}
}
public String encrypt(String str) {
try {
byte[] encipher1 = str.getBytes("UTF8");
byte[] encrpyedBytes = encipher.doFinal(encipher1);
return new BASE64Encoder().encode(encrpyedBytes);
} catch (javax.crypto.BadPaddingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
}
2. 接著建立使用該方法的連接介面
package security;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import wn.security.crypto.TripleDESDecrypter;
import wn.security.crypto.TripleDESEncrypter;
/**
*
* @author asqqsa
*
* Here is a basic implementation of encrpytion and decryption using TripleDES.
*
*/
public class DES{
public String getDecryptoString(String string) {
String decrypted = null;
try {
Decrypter decrypter = new Decrypter(getKey());
decrypted = decrypter.decrypt(string);
} catch (Exception e) {
e.printStackTrace();
}
return decrypted;
}
public String getEncryptoString(String string) {
String encrypted = null;
try {
Encrypter encrypter = new Encrypter(getKey());
encrypted = encrypter.encrypt(string);
} catch (Exception e) {
e.printStackTrace();
}
return encrypted;
}
private SecretKey getKey() {
// there are 32 chars
String keyString ="1234567890abcdefghijklmnopqrstuv";
byte[] keyB = new byte[24]; // a Triple DES key is a byte[24] array
for (int i = 0; i < keyString.length() && i < keyB.length; i++) {
keyB[i] = (byte) keyString.charAt(i);
}
SecretKey key = new SecretKeySpec(keyB, "DESede");
return key;
}
/*****Random Generate Key Vlaue***
public SecretKey getKey() {
try {
return KeyGenerator.getInstance("DESede").generateKey();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
**/
}
3. 建立JSP介面測試
<%@ page import="security.DES" %>
<%@ page contentType="text/html;charset=big5" %>
<html>
<head></head>
<body>
<%
DESCrypto des = new DESCrypto();
String plain = null;
String encrp = null;
encrp = request.getParameter("plaintext");
plain = request.getParameter("secrettext");
%>
<form method='post' name='des' action='Crypto.jsp'>
<table border = 1>
<tr><td colspan='2'>字串Triple DES 使用單一Key 加解密</td> </tr>
<tr>
<td>plaintext encrypto</td>
<td>secrettext decrypto</td>
</tr>
<tr>
<td><input name='plaintext' type='text'></inpute></td>
<td><input name='secrettext' type='text'></inpute></td>
</tr>
<tr>
<td><%= (encrp == null || encrp.equals(""))? " " : des.getEncryptoString(encrp)%></td>
<td><%= (plain == null || plain.equals(""))? " ": des.getDecryptoString(plain)%></td>
</tr>
<tr>
<td colspan='2'><input type='submit' value='submit'></inpute></td>
</tr>
</table>
</form>
</body>
</html>







0 意見:
張貼留言