java 加密 公钥 私钥_如何使用RSA私钥加密和发送DES密钥,然后在Java中加密公钥?...

编辑:不再需要第二个问题 . 问题是填充问题的结果;将密码的参数更改为“RSA / ECB / PKCS1Padding”修复它,这已经在其他使用的密码中实现了 .

对于学校作业,我必须在Java(客户端和服务器)中创建两个程序,这两个程序使用RSA非对称加密来创建和同意使用DES加密的会话密钥 . 交换机中的最终消息包含由客户端生成的密钥,该密钥由客户端的私钥加密,然后使用服务器的公钥再次加密 . 然后,服务器可以使用其私钥解密消息,然后使用客户端的公钥再次解密,以获取DES密钥 . 但是,第一次加密导致大小为256的字节数组,第二次加密需要一个小于该字节数组的字节数组 . 有没有办法操纵数据,以便我可以加密密钥两次,如赋值中指定的那样?请注意,这是一项要求,对会话密钥使用DES算法也是如此 .

另外,忽略第二加密,使得允许客户端和服务器彼此发送加密消息的分配的下一部分产生另一个问题 . 目前,客户端使用服务器的公钥来包装密钥,然后服务器使用其私钥对其进行解包 . 但是,在服务器端解包会话密钥会产生InvalidKeyException;解包的密钥长度是256字节,这是完全错误的 .

在服务器端,我有:

byte[] m4 = new byte[256];

datIn.read(m4);

cUwp.init(Cipher.UNWRAP_MODE, myKey);

ks = (SecretKey)cUwp.unwrap(m4, "DES", Cipher.SECRET_KEY);

System.out.println("Recieved key:\n" + ks);

try{

Cipher desCipher = Cipher.getInstance("DES");

desCipher.init(Cipher.DECRYPT_MODE, ks);

}

catch(NoSuchPaddingException|InvalidKeyException e){

System.out.println("Error: " + e);

}

在客户端:

KeyGenerator keygen = KeyGenerator.getInstance("DES");

SecretKey key = keygen.generateKey();

cWrp.init(Cipher.WRAP_MODE, theirKey);

byte[] m4 = cWrp.wrap(key);

datOut.write(m4);

ks = key;

try{

Cipher desCipher = Cipher.getInstance("DES");

desCipher.init(Cipher.DECRYPT_MODE, ks);

}

catch(NoSuchPaddingException|InvalidKeyException e){

System.out.println("Error: " + e);

}

我的代码的任何其他部分都没有出现任何大小差异;任何其他解密的消息都是正确的大小,但没有一个使用wrap()方法,因为它们是字符串而不是SecretKeys . 有什么东西我不见了吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值