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

使用PEM文件阅读器进行RSA-OAEP加密的Scala语法

穆劲
2023-03-14

我在尝试初始化RSA密码时遇到Scala错误:

我正在尝试读取包含公钥和私钥的PEM文件。在Bouncy城堡中读取pem文件时,我在初始化中传递与key相同的信息时出错。

我的PEM文件:

-----BEGIN RSA Public Key-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl4pTSyS0xsC1HYGsw03+
v48OvOOkuamnEIDwXtYFdYD30GOT1JbKA9xTccFlYuARePizUO9snMzYvowOsAb+
Ichp27QgWbRq7oe+VKJ2yeKbujC6LUO/7DS/TLBGZ6V+q5X+4lFgnVrppFXZXCvp
TiwY5CDraQXexp/4PfIbutyP+AIPVshpDD4CKpCHlTyP/JUK06I6km/AYgIfPsFq
m1Fp+iTh5xu3wX5Ys3G5QkC22k19gG2+dFMm26dtoEemfkAWk7DXfFHYxWSLy1D3
aaZOIOB903bP4MK5bF9CkB//8HwPMCYE6J2XX2xTJP4X3wIdVeLGUMwu1uNZHLeR
UwIDAQAB
-----END RSA Public Key-----

错误需要哪些更改

我的代码:

import org.apache.commons.io.FileUtils
import org.bouncycastle.util.io.pem.PemReader


import java.io.{File, FileOutputStream, FileReader, IOException}
import java.nio.charset.StandardCharsets
import java.security._
import java.security.interfaces.RSAPublicKey
import java.security.spec.InvalidKeySpecException
import java.security.spec.PKCS8EncodedKeySpec
import java.security.spec.X509EncodedKeySpec
import javax.crypto.Cipher
import java.security.KeyFactory


object RSA_encrypt_decrypt extends App {

  val file = "/home/roxane/Music/ss_key"
  val readfile = new File(file)
  val key = FileUtils.readFileToString(readfile, "UTF-8")
  val sym_key = key.getBytes(StandardCharsets.UTF_8)
  println(sym_key)

  val pubfile = "/home/roxane/Music/public.pem"
  val readpubfile = new FileReader(pubfile)
  val prvfile = "/home/roxane/Music/private.pem"
  val readprvfile = new FileReader(prvfile)


  val publickey = RSAKey(readpubfile,"PUBLIC")

  val pipher = Cipher.getInstance("RSA/ECB/OAEPwithSHA1andMGF1Padding")
  pipher.init(Cipher.ENCRYPT_MODE, publickey)


  def RSAKey(file: FileReader, key: String) :Any = {
    key.toUpperCase() match {

      case "PUBLIC" => {
        // Generate public key from pem file
        val factory = KeyFactory.getInstance("RSA")
        val pubpemReader = new PemReader(file) // readpubfile
        val pubpemObject = pubpemReader.readPemObject()
        val content = pubpemObject.getContent()

        val pubKeySpec = new X509EncodedKeySpec(content)
        val pubkey = factory.generatePublic(pubKeySpec)

        return factory.generatePublic(pubKeySpec).asInstanceOf[RSAPublicKey]
      }
    }
  }

错误:

重载方法值初始化(x1美元:Int,x2美元:java.security.cert.证书)单位(x1美元:Int,x2美元:java.security.密钥)单位不能应用于(Int,任何)pipher.init(密码。ENCRYPT_MODE,公钥)

我正在尝试为工厂编写与scala等价的代码。generatePublic(pubKeySpec)。A安装[RSAPublicKey],如下所示

rsaPublicKey = (RSAPublicKey) factory.generatePublic(pubKeySpec);

也许这就是我错的地方。

共有1个答案

微生自怡
2023-03-14

问题已解决。我对Java代码使用了正确的类型转换:问题在于生成RSAKey的方法签名。右签名如下:

 def RSAKey(file: FileReader, key: String) :Key
 类似资料:
  • 我使用RSA_public_encrypt函数发送加密数据到套接字。我正在读取公钥。使用"pkey=PEM_read_PUBKEY(f, NULL, NULL, NULL);"函数的PEM文件。从上面的函数中检索的pkey是类型EVP_PKEY*,我不能在函数RSA_public_encrypt中使用。(RSA_public_encrypt使用RSA*类型密钥) 如何将EVP_PKEY*PKEY转

  • 我使用的是Web加密,更具体地说,这些示例是:https://github.com/diafygi/webcrypto-examples/#rsa-oaep 更新

  • 问题内容: 我该如何等效于以下c ++代码? 我看过Go rsa软件包 。看起来EncryptPKCS1v15()可能等同于RSA_private_encrypt()。但是除了GenerateKey()之外,我看不到如何创建一个PrivateKey对象,该对象(可以通过查看源代码来确认)使用随机质数生成一个。 我是否需要弄清楚如何解码PEM文件,以便提取出PrivateKey字段的值? 更新: 与

  • 我试图用JavaScript加密一个短字符串,用Java解密它。解密失败,我认为这是因为两个平台之间的块模式和/或填充不同。我尝试在Java和JavaScript中加密相同的字符串,结果不同,这表明确实存在差异。以下是创建键的Java代码: 这是我用来测试加密的Java代码: 我将公钥发送到JavaScript进程,并将其转换为ArrayBuffer,变量名为publicKey。我已经验证了Jav

  • 错误:正在执行热重新加载。。。正在将文件同步到IA Emulator上的设备AOSP。。。在1021ms内重新加载了707个库中的8个。I/flatter(7395):“Future”的实例E/flatter(7395):[ERROR:flatter/lib/ui/ui\u dart\u state.cc(157)]未处理的异常:FileSystemException:无法打开文件,路径=“Fut

  • 我正在尝试实现RSA算法。我想加密一个图像。问题是当解密完成时,文件无法读取。我不知道问题到底出在哪里。这是RSA的实现: 这是主要方法: 这是加密方法: 这是解密方法: 阅读和写作的方法如下所述:http://www.java2s.com/Code/Java/File-Input-Output/Readfiletobytearrayandsavebytearraytofile.htm