?? javaencode.txt
字號:
// 導(dǎo)入 JAVA 標(biāo)準(zhǔn)包
import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.*;
// 加密及散列類 Encode
class Encode
{
// 屬性定義
private byte code[]; // 密文
private byte digest[]; // 明文散列結(jié)果
private byte pass[]; // 用戶密鑰
private byte text[]; // 明文
private SecretKeySpec key; // 加密密鑰
// 構(gòu)造器
public Encode()
// 默認(rèn)構(gòu)造器
{
}
public Encode(String string1, String string2)
// 重載構(gòu)造器
// 用 string1 初始化 text,用string2 初始化 pass
{
try
{
text=string1.getBytes("UTF8");
pass=string2.getBytes("UTF8");
generateKey();
}
catch (Exception e)
{
System.out.println("構(gòu)造器發(fā)生異常 " + e.getMessage());
}
}
// 公有方法
public static void main(String args[])
// 用于測試類的代碼
{
try
{
System.out.println("加密及散列類 Encode 測試代碼");
System.out.println(" 使用 SHA-256 對輸入字符串進(jìn)行散列");
System.out.println(" 使用 MD5 對用戶密鑰進(jìn)行散列創(chuàng)建加密密鑰");
System.out.println(" 使用 AES-128 對輸入字符串進(jìn)行加密處理\n");
String strText="";
String strPass="";
byte temp[]=new byte[255];
System.out.print("請輸入明文:");
System.in.read(temp);
for (int i=0; i<temp.length; i++)
{
if ((int)temp[i] == 0) break;
strText+=(char)temp[i];
}
System.out.print("請輸入密鑰:");
System.in.read(temp);
for (int i=0; i<temp.length; i++)
{
if ((int)temp[i] == 0) break;
strPass+=(char)temp[i];
}
Encode encode=new Encode(strText, strPass);
temp=encode.getDigest();
System.out.println("散列結(jié)果:");
for (int i=0; i<temp.length; i++)
{
System.out.print(temp[i] + " ");
if (i%8 == 0)
System.out.println();
}
temp=encode.getCoded();
System.out.println("\n加密結(jié)果:");
for (int i=0; i<temp.length; i++)
{
System.out.print(temp[i] + " ");
if (i%8 == 0)
System.out.println();
}
temp=encode.getDecoded();
System.out.println("\n解密結(jié)果:");
String result="";
for (int i=0; i<temp.length; i++)
result+=(char)temp[i];
System.out.println(result);
}
catch (Exception e)
{
System.out.println("驗證代碼段發(fā)生異常 "+e.getMessage());
}
}
public byte[] getCoded()
// 返回加密結(jié)果
{
cipherMessage();
return code;
}
public byte[] getDecoded()
// 返回解密結(jié)果
{
decipherMessage();
return text;
}
public byte[] getDigest()
// 返回散列結(jié)果
{
digestMessage();
return digest;
}
// 私有方法
private void cipherMessage()
// 使用 AES 加密明文
{
try
{
Cipher cipher=Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, key);
code=cipher.doFinal(text);
}
catch (Exception e)
{
System.out.println("加密時發(fā)生異常 "+e.getMessage());
}
}
private void decipherMessage()
// 使用 AES 解密密文
{
try
{
Cipher cipher=Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, key);
text=cipher.doFinal(code);
}
catch (Exception e)
{
System.out.println("解密時發(fā)生異常 "+e.getMessage());
}
}
private void digestMessage()
// 使用 SHA-256 對明文進(jìn)行散列處理
{
try
{
// 創(chuàng)建散列對象
MessageDigest sha=MessageDigest.getInstance("SHA-256");
// 使用 SHA-256 進(jìn)行散列處理
sha.update(text);
digest=sha.digest();
}
catch (Exception e)
{
System.out.println("散列時發(fā)生異常 "+e.getMessage());
}
}
private void generateKey()
// 對用戶密碼進(jìn)行 MD5 散列創(chuàng)建加密密鑰
{
try
{
// 創(chuàng)建散列對象
MessageDigest md5=MessageDigest.getInstance("MD5");
// 使用 MD5 進(jìn)行散列處理
md5.update(pass);
byte temp[]=md5.digest();
// 創(chuàng)建密鑰
key=new SecretKeySpec(temp, "AES");
}
catch (Exception e)
{
System.out.println("產(chǎn)生密鑰時發(fā)生異常 "+e.getMessage());
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -