当前位置: 首页 > 知识库问答 >
问题:

为什么Java类密码在Android平台上的加密和解密模式下会产生相同的结果?

罗飞宇
2023-03-14
KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
KeyPair keyPair = generator.genKeyPair();
PrivateKey privateKey = keyPair.getPrivate();

byte[] data = "12345".getBytes();

Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, privateKey);
byte[] encrypted = cipher.doFinal(data);

Cipher cipher2 = Cipher.getInstance("RSA");
cipher2.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decrypted = cipher2.doFinal(data);

我试过什么?

如果我使用Cipher.GetInstance(“des”)解密“12345”.GetBytes(),将引发异常。

这是否意味着使用RSA时,类密码可以自动检测是否应该使用encrypt或decrypt(忽略我在初始化Cipher类时指定的模式参数)?

共有1个答案

韩晋
2023-03-14

首先,RSA是不对称的,所以使用公钥加密,私钥解密。

第二,那些不产生相同的产出。

 KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
    KeyPair keyPair = generator.genKeyPair();
    PrivateKey privateKey = keyPair.getPrivate();

    byte[] data = "12345".getBytes();

    Cipher cipher = Cipher.getInstance("RSA");
    cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic());
    byte[] encrypted = cipher.doFinal(data);
    System.out.println(new String(encrypted));

    Cipher cipher2 = Cipher.getInstance("RSA");
    cipher2.init(Cipher.DECRYPT_MODE, privateKey);
    byte[] decrypted = cipher2.doFinal(encrypted);
    System.out.println(new String(decrypted));

输出为

 类似资料:
  • 问题内容: 我正在尝试使用广泛使用的SimpleCrypto Java类在Java(Android)中加密字符串,并在ColdFusion 9中解密字符串(反之亦然)。我已经将完全相同的SimpleCrypto类导入到ColdFusion中,并这样称呼它: 使用密钥“ apple”对字符串“ john”进行加密时,它将在CF中输出:9E90A36325AE4F4F7352D6469A7068A2

  • 问题内容: 我想用Java加密和解密密码,然后以加密形式存储到数据库中。如果它是开源的,那就太好了。有什么建议/建议吗? 问题答案: 编辑 :这个答案是旧的。现在 不建议 使用MD5,因为它很容易被破坏。 我想象中的MD5必须足够好?您可以使用MessageDigest实现它。 这里还列出了其他算法。 如果确实需要,这是它的第三方版本: Fast MD5

  • 我想在Java文件中存储一个加密的密码。我看到了一个使用javax.crypto的解决方案,但问题是密钥是动态生成的,并且是随机的。 有没有办法告诉javax.crypto方法: 这是否可以替换为基于某个私钥生成一次的我自己的密钥? 有谁能给我指出一些如何做到这一点的资源吗?

  • 问题内容: 我正在使用静态方法在类中使用javax.crypto加密和解密消息。我有2个使用cipher和dcipher的静态方法,以完成他们应该做的事情,我需要初始化一些变量(也是静态的)。但是,当我尝试使用它时,我得到的InvalidKeyException与我提供给ecipher.init(…)的参数。我找不到原因。这是代码: 问题答案: AES-256(和AES-192)要求为JRE安装无

  • 问题内容: 我正在使用此代码在Java和Android中加密和解密某些字符串,并且在每个系统中,我得到一个不同的值。 我使用的代码来自http://www.androidsnippets.com/encryptdecrypt- strings (我不会粘贴它,因为它很大)。 例如,在Android中用于加密“ aa”的代码如下:1C6BD31C57F42ACFD0EDD2DD5B7A92CA 和与

  • 我想做一个简单的应用程序加密/解密与AES的消息。我的代码似乎现在工作,因为我得到的文本加密和解密没有任何问题。 我有一个输入字段、一个输入密码用于解密/加密的字段和一个输出字段。和两个按钮(加密/解密)。 问题是****,当我输入一条消息,设置密码并对其进行加密,然后试图引发无效的密码获取时,尽管输入的密码与我用于加密的密码不匹配,但消息还是会解密。 下面是我的密钥生成代码: 这里是我加密消息的