1、非對稱密鑰:
package com.mysec;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import static com.mysec.myutil.Util.println;
public class MDTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
byte[] pw1 = new String("dkfdsfsdflasdfasdfasdf").getBytes();
byte[] pw2 = new String("dkfdsfsdflasdfasdfasdf").getBytes();
//MD2/MD5/SHA1
//非對稱密鑰
MessageDigest md = MessageDigest.getInstance("MD5");
System.out.println("服務提供者:"+md.getProvider());
byte[] b1 = new String("這是散列字節").getBytes();
md.update(b1);
byte[] r1 = md.digest(pw1);
md.update(b1);
byte[] r2 = md.digest(pw2);
println("pw1加密後:"+new String(r1));
println("pw2加密後:"+new String(r2));
//轉換爲16進制方便讀取放入數據庫
println(convertHex(r1));
println(convertHex(r2));
println(md.isEqual(r1, r2));
//println(md.getAlgorithm());
//println(md.getDigestLength());
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static String convertHex(byte[] b){
StringBuffer sb = new StringBuffer();
for(byte tmp:b){
sb.append(Integer.toHexString(tmp&0XFF));
}
return sb.toString();
}
}
2、對稱密鑰算法
package com.mysec;
import static com.mysec.myutil.Util.println;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
public class CipherTest {
/**
* @param args
* @throws NoSuchPaddingException
* @throws NoSuchAlgorithmException
*/
public static byte[] encoder(Key key,String text){
return null;
}
public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
// TODO Auto-generated method stub
//對稱算法名
String info = "this is a my info!";
KeyGenerator generator = KeyGenerator.getInstance("DES");
//初始化長度,DES只能是56
generator.init(56);
//生成密鑰
Key key = generator.generateKey();
byte[] keyEncode = key.getEncoded();
println("密鑰是:"+toHexString(keyEncode));
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
println(cipher.getProvider().getName());
println("原文:"+info);
//用cipher進行加密
cipher.init(Cipher.ENCRYPT_MODE,key);
byte[] encoderResult = cipher.doFinal(info.getBytes());
println("密文:"+toHexString(encoderResult));
//用cipher進行解密
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] decryptResult = cipher.doFinal(encoderResult);
println("解密後:"+new String(decryptResult));
}
public static String toHexString(byte[] b){
StringBuffer sb = new StringBuffer();
for(int i=0;i<b.length;i++){
sb.append(Integer.toHexString(b[i]&0XFF));
}
return sb.toString();
}
}
3、數字簽名
package com.mysec;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import static com.mysec.myutil.Util.println;
public class SignTest {
/**
* @param args
*/
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
String info = "this is my info!";
//獲得密鑰對
KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
//初始化長度
generator.initialize(1024);
//生成密鑰對
KeyPair keyPair = generator.generateKeyPair();
//獲得私鑰
PrivateKey privateKey = keyPair.getPrivate();
println("私鑰是:"+toHexString(privateKey.getEncoded()));
//獲得公鑰
PublicKey publicKey = keyPair.getPublic();
println("公鑰是:"+toHexString(publicKey.getEncoded()));
Signature sign = Signature.getInstance("MD5WithRSA");
//對私鑰進行簽名
sign.initSign(privateKey);
sign.update(info.getBytes());
//獲得簽名值
byte[] signature = sign.sign();
println("簽名值是:"+toHexString(signature));
//用公鑰初始化簽名對象
sign.initVerify(publicKey);
//這裏應該是解密後的信息,這裏直接用原來的
sign.update(info.getBytes());
//簽證簽名
if(sign.verify(signature)){
System.out.println("驗證簽名成功!");
}else{
System.out.println("驗證簽名失敗!");
}
}
public static String toHexString(byte[] b){
StringBuffer sb = new StringBuffer();
for(int i=0;i<b.length;i++){
sb.append(Integer.toHexString(b[i]&0XFF));
}
return sb.toString();
}
}