import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.security.spec。AlgorithmParameterSpec的;
import javax.crypto.Cipher;
import javax.crypto.spec。IvParameterSpec;
import javax.crypto.spec。SecretKeySpec;
公共类 AES {
BufferedReader阅读器;
最终字符串IV = “AAAAAAAAAAAAAAAA” ;
public static void main(String args []){
AES aes = new AES();
aes.go();
}
public AES(){
reader = new BufferedReader
(new InputStreamReader(System .in));
}
void go(){
StringBuffer message = new StringBuffer();
尝试 {
System .out.print(“ 输入消息:”);
message.append(reader。readLine());
while(message.length()%16!= 0)
message.append(' \ u 0000 ');
} catch(Exception e){
e.printStackTrace();
回归 ;
}
StringBuffer key = new StringBuffer();
尝试 {
System .out.print(“输入密钥:”);
key.append(reader.readLine());
while(key.length()%16!= 0)
key.append(' \ u 0000');
} catch(Exception e){
e.printStackTrace();
回归 ;
}
//加密
字节 [] cipher =
encrypt(message.toString(),key.toString());
System .out.print(“Cipher:”);
for(int i = 0 ; i <cipher.length; i ++)
System .out.print((int)cipher [ i]);
的System.out.println();
//密钥
//key.replace(0,6,“ABCDEF”)无效;
//解密
字符串
decrypted = decrypt(cipher,key.toString());
System .out.println(“Decrypted message:” + decrypted );
}
byte [] encrypt
(String plain,String key){
byte [] encrypted = null ;
尝试 {
Cipher cipher =
Cipher.getInstance
(“AES / CBC / NoPadding”,“SunJCE”);
SecretKeySpec sks =
new SecretKeySpec(key.getBytes(“ UTF-8”),“AES”);
AlgorithmParameterSpec参数;
params = new IvParameterSpec(IV.getBytes(“ UTF-8”));
cipher.init(Cipher.ENCRYPT_ MODE,sks,params);
encrypted = cipher.doFinal(plain.getBytes(“UTF-8”));
} catch(Exception e){
e.printStackTrace();
}
return encrypted;
}
String decrypt(byte [] ct,String key){
StringBuffer decrypted = new StringBuffer();
尝试 {
Cipher cipher =
Cipher.getInstance(“AES / CBC / NoPadding”,“SunJCE”);
SecretKeySpec sks =
new SecretKeySpec(key.getBytes(“ UTF-8”),“AES”);
AlgorithmParameterSpec 参数 ;
params = new IvParameterSpec(IV.getBytes(“UTF-8“));
cipher.init(Cipher.DECRYPT_ MODE,sks,params);
String s = new String(cipher.doFinal(ct),”UTF-8“); decrypted.append
(s);
} catch (例外 e){
e.printStackTrace();
}
for(int i = decrypted.length() - 1 ; i> 0; i -- ){
if(decrypted.charAt(i)== ' \ u 0000')
decrypted.deleteCharAt(i);
else break ;
}
return decrypted.toString();
}
}
*** FE,输出:
输入消息:“Obeanie上了Tora Bora并最终进入了Abotttabad,Yankee Doodle Doo和Big Brother花了10年时间才发现它。目的的单一性是必要的,并且使用NSA的Prism是值得怀疑的。”
输入密钥:JackRabbitMoab308
密码:3224-48-107-24-1126134-1234771101-48-82114-87-84-3512-19-117507-103427011567-3698-698248-548625587-25-56-65-69-546-5875- 77563219
解密的消息:Obeanie上了Tora Bora并最终进入了Abotttabad,Yankee Doodle Doo和Big Brother花了10年的时间才算清楚这一点。目的的单一性是必要的,NSA的棱镜的使用是值得怀疑的。
评论专区