这是我的密码
public void sendMessage(User receiver, String message) throws Exception {
//Generate AES key for encrypt message
KeyGenerator keyGenerator=KeyGenerator.getInstance("AES");
Integer keyBitSize=256;
keyGenerator.init(keyBitSize);
SecretKey simKey=keyGenerator.generateKey();
System.out.println("AES KEY: "+simKey.getEncoded()+"\n");
//Encrypt message
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, simKey);
byte[] encMess1=cipher.doFinal(message.getBytes("UTF-8"));
String messToWrite=Base64.getEncoder().encodeToString(encMess1);
//Encrypt AES key
byte[] KeyToEnc=simKey.getEncoded();
cipher=Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, receiver.getPub());
cipher.update(KeyToEnc);
byte[] AESEncWrt=cipher.doFinal();
String aeskeyString=new String(Base64.getEncoder().encodeToString(AESEncWrt));
System.out.println("AES ENC:"+aeskeyString+"\n");
//Decrypt AES key
byte[] KeyToDec=Base64.getDecoder().decode(aeskeyString.getBytes());
cipher.init(Cipher.DECRYPT_MODE, receiver.getPriv());
cipher.update(KeyToDec);
byte[] decAesKey=cipher.doFinal();
System.out.println("AES DEC: "+decAesKey+"\n");
//Write message and AES key in file
BufferedWriter messFile=new BufferedWriter(new FileWriter(receiver.getInbox()+"/"+getUsername()+".txt"));
System.out.println("WRITING TO FILE:"+messToWrite+"\n");
messFile.write(messToWrite);
messFile.close();
BufferedWriter aeswrite=new BufferedWriter(new FileWriter(receiver.getInbox()+"/"+getUsername()+"key.txt"));
System.out.println("WRT KEY:"+aeskeyString+"\n");
aeswrite.write(aeskeyString);
aeswrite.close();
System.out.println("-------------------------------");
}
抱歉,如果我的代码一团糟。
当您执行此操作时:
System.out.println("AES KEY: "+simKey.getEncoded()+"\n");
您不打印键的内容,而只是一个指向字节数组的“指针”。解密时,您将得到一个带有不同“指针”的新字节[]
。
您需要打印实际内容,例如十六进制。Java对十六进制打印的支持有限,但类似的内容将为您提供字节数组的十六进制表示:
System.out.println(new BigInteger(1, simKey.getEncoded()).toString(16));
问题内容: 我正在编写一个用于传输文件的小型应用程序,或多或少地将其作为一种学习更多编程加密基础的方法。这个想法是生成一个RSA密钥对,交换公共密钥,并发送AES iv和密钥以进一步解密。我想用接收者的RSA公钥加密AES密钥,如下所示: 然后,我将密钥值写给接收器,并按如下方式解密: 在控制台的另一端,我将其作为输出: 此外,如果我创建一个大小为16的字节数组,并将cipher.doFinal(
我的进程: 1。生成对称密钥 2。使用对称密钥 3加密数据。使用RSA 4加密对称密钥。发送加密密钥和数据 5。使用RSA 6解密加密的对称密钥。使用对称密钥 7解密数据。已完成
我正在使用Safenet HSM(硬件安全模块)来存储我的加密密钥,并且我正在尝试使用JavaAPI和SunPKCS11解包使用RSA加密的密钥(AES/DES)。我想安全地执行此操作,以便无法从HSM中提取解包的AES/DES密钥(就像RSA私钥值是不可见的)。但是,在解包后,解包密钥的值在HSM之外的密钥对象中是可见的。 这是我的代码: 如何告诉代码不要泄露未包装的密钥?我必须在PKCS11配
但这总是给我以下的例外- 我的键盘生成逻辑- 我的加密逻辑- Base64 Util方法-
我正在使用OpenSSL RSA API用服务器的公钥加密数据。 我使用的是,所以RSA应该可以轻松地用256字节的公钥加密255字节。但我收到了: 我改变dl(data_lenght)到256(只有1),我得到了这个: 我知道RSA可以用256个密钥编码255个字节。有什么问题吗?