gpt4 book ai didi

Java RSA 两次获得相同的代码

转载 作者:行者123 更新时间:2023-12-04 05:24:21 28 4
gpt4 key购买 nike

我有这个问题
我正在尝试使用此代码对字符串进行两次加密:

KeySpec keySpec = new X509EncodedKeySpec(new BigInteger(publicKey, 36).toByteArray());
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
Key decodedPublicKey = keyFactory.generatePublic(keySpec);
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, decodedPublicKey);
byte a1[] = cipher.doFinal(z.getBytes());

KeySpec keySpec2 = new X509EncodedKeySpec(new BigInteger(publicKey, 36).toByteArray());
KeyFactory keyFactory2 = KeyFactory.getInstance("RSA");
Key decodedPublicKey2 = keyFactory2.generatePublic(keySpec2);
Cipher cipher2 = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher2.init(Cipher.ENCRYPT_MODE, decodedPublicKey2);
byte a2[] = cipher.doFinal(z.getBytes());

两者都使用相同的 publicKey , 和相同的输入 z但是两个代码块中的每一个都创建一个不同的字节数组( a1!=a2)
我希望它是平等的,但我不知道该怎么做(试图查找但还没有找到答案)。

如果有人可以帮助我,我将不胜感激。

谢谢

编辑 :

好吧,我没有使用 AES 加密,因为我加密的数据非常小(只是一个密码)

我有一个客户端和一个服务器,当有人连接到客户端时,我想确认他的密码(他的加密密码在 android sdcard 上的文件中)所以我想将真实密码与用户输入的密码进行比较登录页面

我在客户端上没有私钥,所以我无法解密设备上已经存在的加密通行证,所以我尝试比较加密密码(我认为这与我现在知道的密码相同) )

也许你知道我能做什么?如何在我只有公钥的情况下比较密码和加密密码

谢谢

最佳答案

PKCS#1 填充用于确保相同的纯文本不会加密为相同的密文。 PKCS#1 是一种最佳非对称加密填充形式,它是 described on wikipedia .对于相同的纯文本具有不同的密文是一件好事。

如果你想破坏一个好的密码,你可以指定“NoPadding”而不是“PCKS1Padding”。这样做的缺点是填充还负责指定消息的长度。使用“NoPadding”,您会发现当您解密密文时,您的消息会以大量零字节为前缀。

我还要评论说,这不是您使用 RSA 加密消息的方式。 RSA 仅适用于短数据。例如,1024 位 RSA 密码只能加密 117 个字节。使用 RSA 加密消息的正确方法是生成一次性 AES 密码 key ,使用 RSA 加密 AES 密码 key ,并使用 AES 加密消息。这使您可以安全地发送任何长度的消息。

关于Java RSA 两次获得相同的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13370135/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com