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

Android RSA解密(失败)/服务器端加密(openssl_public_encrypt)

严繁
2023-03-14

我正在尝试使用在我的设备上生成的RSA密钥解密我的android应用程序中的字符串。加密由php服务完成,使用我的应用程序提供的公共rsa密钥。我的问题是解密,解密失败了。

我正在做以下工作:

在用base64.encode(pubkey.getencoded())和私钥进行“base64”编码后,这两个密钥(公共和私有)都保存到文件中。->好

当我调用我的webservice时,我在post变量->OK中传递我的公钥(在基64中

web服务(一个php服务)使用公钥通过openssl_public_encrypt函数加密一个短字符串。加密的字符串被转换为Base64。->似乎可以,函数不返回false。

应用程序检索服务的结果,并对其进行解码(base64.decode())->OK(我已经检查了,接收到的字节与openssl_public_encrypt()函数生成的字节匹配)

最后一件事是解密这个字符串,我正在做以下操作:->NOT OK

Cipher Cipher=Cipher.getInstance(“RSA”);

byte[]decryptedBytes=cipher.dofinal(cryptedBytes);

String decryptedString=新字符串(decryptedBytes);

System.out.println(decryptedString);

我错过了什么?

共有1个答案

司马庆
2023-03-14

默认情况下,OpenSSL使用padding=openssl_pkcs1_padding。因此,要在两侧具有相同的填充机制,您应该使用cipher.getInstance(“rsa/ecb/pkcs1padding”)。这也是您可以在Java SE中使用的功能。

注意,在密码学中依赖默认的操作模式是非常危险的。许多实现都有不同的默认值,这些默认值很难查找。所以总是尝试完全指定要使用的算法/模式。

您可以尝试其他的RSA填充模式,但请注意--不幸的是--Android已经禁用了大量算法和别名,这些算法和别名来自他们改编的Bouncy Castle源代码

[编辑]这是一个老答案,现在强烈建议使用OAEP填充,或者使用RSA-KEM的混合加密。

 类似资料:
  • 我尝试在服务器上进行gpg加密/解密,对于加密,我使用以下命令行: 我想要找到原因:同一个用户有2个不同的密钥和1个秘密密钥。但现在又出现了一个问题:我删除了错误的键,并再次进行相同的测试。 解密后的答案是: 您需要一个密码短语来解锁用户的密钥:“Droli Mail_Adress”2048位RSA密钥,ID 6D2F1BE9,创建2017-07-19(主密钥ID 09C41BAC) 没有关于gp

  • 因此,这种特殊的异常非常常见,但我的问题与通常被问到的略有不同。 我有一个AES解密和加密函数,定义如下: 现在,如果我像这样执行单个解密: 字节数组输出很好。而如果我执行双重加密/解密: 我得到了著名的<code>javax.crypto。BadPaddingException:给定的最终块未正确填充异常。请注意,和只是整数(假设它们都是0)。目前,IVBytes只是一个大小为16的空字节数组,

  • 我有一个问题与ADFS身份验证,因为我升级了Spring启动版本从2.2.5。释放到2.5. x 在新版本中,我收到以下错误消息:未能解密EncryptedData 依赖性: SAML请求 重新分析:/ SAML请求: 西格尔:http://www.w3.org/2001/04/xmldsig-more#rsa-sha256 2.vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv

  • 我必须用Twofish/CBC算法在Delphi中加密字符串,将其发送到服务器并在那里解密。我已经测试了下面的代码,B64编码/解码过程有效,但是我被困在密码加密/解密上。 我正在使用DEC 5.2用于德尔福。 以下是进行加密的德尔菲代码: 和应该解密发送数据的PHP函数: 我相信我必须对salt和初始化向量做更多的改动,但是我不知道怎么做。据我所知,KDFx()函数使SHA1从用户密码和salt

  • 服务器端加密是FDS在将您的数据写入数据中心的磁盘时会在对象级别上加密这些数据,并在您访问这些数据时为您解密这些数据。FDS加密使用AES-256来加密您的数据。 应用场景 适合对于数据存储有高安全性或者合规性要求的应用场景。 使用方式 在控制台开启bucket的加密存储 开启加密后,会对新上传的Object使用AES-256进行加密。若要对存量数据加密,请使用 存量数据加密工具 被加密的Obje

  • 我配置了一个无密码的SFTP服务器。我想使用带有用户名和密码的jsch(JAVA)库连接它。我一直在使用以下代码行:- JAVA中的这一行是否会覆盖SSH配置的设置(少密码)? 请注意SFTP服务器使用终端命令SFTP连接良好,没有提示密码。