RSA加密-字节数组和字符串之间的转换[重复]

2023-12-13

我正在尝试实现 RSA 加密,它能够执行以下操作:

  • 接受字符串值作为使用公钥加密的输入
  • 以字符串形式返回加密的密码
  • 接受加密密码作为使用私钥解密的输入
  • 返回解密后的原始值

如果我直接解密,我就能使加密/解密工作byte加密返回的数组,但如果我解析它似乎无法使其工作byte数组到一个String然后回到bytes again.

下面的代码does work:

cipher.init(Cipher.ENCRYPT_MODE, pubKey);
byte[] cipherBytes = cipher.doFinal(input);
System.out.println("cipher: " + new String(cipherBytes));
returnValue += new String(cipherBytes);

cipher.init(Cipher.DECRYPT_MODE, privKey);
byte[] plainText = cipher.doFinal(cipherBytes);
System.out.println("plain : " + new String(plainText));

下面的代码does NOT work:

byte[] cipherBytes = cipher.doFinal(input);
System.out.println("cipher: " + new String(cipherBytes));
returnValue += new String(cipherBytes);

String cipherText = new String(cipherBytes);
byte[] reCipherBytes = cipherText.getBytes();

cipher.init(Cipher.DECRYPT_MODE, privKey);
byte[] plainText = cipher.doFinal(reCipherBytes);
System.out.println("plain : " + new String(plainText));

谁能建议我需要做什么才能使第二个版本成功运行?


我认为你的问题是因为将字节数组转换为字符串时默认的java编码/解码字符集,反之亦然。

我已经调试了您的代码,并且 reCipherBytes 的长度与 cipherBytes 不同,这就是第二个代码块引发异常的原因。

我建议您使用 base64 编码将密码字节转换为字符串。

    cipher.init(Cipher.ENCRYPT_MODE, publicKey);
    byte[] cipherBytes = cipher.doFinal(input);
    System.out.println("cipher: " + new String(cipherBytes));
    String returnValue = new String(cipherBytes);

    String cipherText = Base64.getEncoder().encodeToString(cipherBytes);
    byte[] reCipherBytes = Base64.getDecoder().decode(cipherText);

    cipher.init(Cipher.DECRYPT_MODE, privateKey);
    byte[] plainText = cipher.doFinal(reCipherBytes);
    System.out.println("plain : " + new String(plainText));

这段代码片段应该可以工作

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RSA加密-字节数组和字符串之间的转换[重复] 的相关文章

  • Spring @PostConstruct 依赖于 @Profile

    我想在一个配置类中拥有多个 PostConstruct 带注释的方法 这些方法应该根据 Profile 进行调用 你可以想象这样的代码 Configuration public class SilentaConfiguration priv
  • 在这个 Spring MVC 展示示例中如何使用 @RequestAttribute 和 @ModelAttribute 注释?

    我对 Spring MVC 还很陌生 这段时间我正在学习Spring MVC 展示 https github com spring projects spring mvc showcase可从 STS 仪表板下载示例 我在理解此示例中如何处
  • 使用可执行 JAR 时指定 Log4j2 配置文件

    使用可执行 JAR 文件时 我在指定 Log4j2 配置文件位置时遇到问题 如果我将所有 JAR 分开 效果很好 但是当我尝试将它们组合成一个可执行 JAR 文件时 由于某种原因log4j2 xml未从命令行获取文件 我尝试过这两种指定位置
  • Mockito 匹配器和基元数组

    有了 Mockito 我想verify 方法调用byte 在它的参数列表中 但我没有找到如何写这个 myMethod byte 我只想要类似的东西anyByteArray 如何使用 Mockito 做到这一点 我会尝试any byte cl
  • 如何获取JavaFX的版本号?

    如何在运行时找出我正在使用哪个版本的 JavaFX 简单的方法之一就是简单地阅读javafx properties文件位于您的 JAVA HOME jre lib目录 我现在安装了 Java 1 7 u9 与之捆绑的 JavaFX 是 v2
  • 对 Java Servlet 进行单元测试

    我想知道对 servlet 进行单元测试的最佳方法是什么 只要内部方法不引用 servlet 上下文 测试内部方法就不是问题 但是测试 doGet doPost 方法以及引用上下文或使用会话参数的内部方法呢 有没有办法简单地使用经典工具 例
  • 如何统计lucene索引中每个文档的term数?

    我想知道 lucene 索引中每个文档的术语数量 我一直在 API 和互联网上搜索 但没有结果 你能帮助我吗 Lucene 的构建是为了回答相反的问题 即哪些文档包含给定术语 因此 为了获取文档的术语数量 您必须进行一些修改 第一种方法是存
  • 为什么在java中加载JNI是在静态初始化程序中完成的?

    在许多使用 JNI 的示例中 我看到类似以下内容 class SampleClass static System loadLibrary somelib 这种特殊语法的目的是什么 为什么使用这个 而不仅仅是在类构造函数或类似的东西中 我想你
  • Java 线程 JavaDoc

    我编写了一个只能在特定线程上调用的方法 是否应该将标准注释或注释添加到方法的 javadoc 中来表示这一点 不知道有任何这样的标准注释 Java 并发实践 http www javaconcurrencyinpractice com 在第
  • 将项目导入 Eclipse 后出现“必须重写超类方法”错误

    任何时候我必须将我的项目重新导入到 Eclipse 中 如果我重新安装了 Eclipse 或者更改了项目的位置 几乎全部我的重写方法的格式不正确 导致错误 该方法必须重写超类方法 值得注意的是 无论出于何种原因 Android 项目中方法参
  • 参数列表中的“...”是什么意思? doInBackground(字符串...参数)

    我不明白那个语法 尝试用谷歌搜索各种单词加上 是没有用的 它被称为varargs http java sun com j2se 1 5 0 docs guide language varargs html 这个事实应该产生更好的谷歌结果 h
  • JNA Windows 服务启动类型

    我一直在使用 JNA 并且能够使用下面的代码返回 Windows 服务的状态 即启动或停止 但我不确定如何返回服务的启动类型 我确信 JNA 之外还有其他方法 但如果可能的话我想继续使用 JNA import com sun jna imp
  • ClassNotFoundException:在嵌入了 cxf 依赖项的 OSGi 包中找不到 org.glassfish.jersey.internal.RuntimeDelegateImpl

    这与jax rs 2 0 更改默认实现 https stackoverflow com questions 17366266 jax rs 2 0 change default implementation我有一个 OSGi 包 其中包含
  • AWS Java SDK 中 DynamoDB v2 的迁移详细信息?

    有没有人对新的命名空间进行了更改 com amazonaws services dynamodbv2 以及 AWS Java SDK 1 4 2 及更高版本 中 DynamoDB 的接口 本地二级指数的发布显然需要根据1 4 2 发行说明
  • 如何指示 yum 安装特定版本的 OpenJDK

    我尝试安装openjdk in the redhat服务器 如何安装指定版本 我要安装的版本是 11 0 4 使用以下命令安装的版本是11 0 6 yum install java 11 openjdk devel 曾与 yum showd
  • Tomcat 与 Weblogic JNDI 查找

    我们使用的 Weblogic 服务器已配置为允许 JNDI 数据源名称 例如 appds 对于开发 本地主机 我们可能会运行 Tomcat 并且在 server xml 的 部分中声明时 Tomcat 会将 JNDI 数据源挂在 JNDI
  • 术语“可序列化”是什么意思? [复制]

    这个问题在这里已经有答案了 不太确定我读过的定义可序列化实际上做了什么 import java io Serializable import java text StringCharacterIterator import java uti
  • 删除子类中的注释?

    我有一个子类 需要一个注释 在删除的父类中声明 做这个的最好方式是什么 public class Parent MyAnnoation String foobar public class Child extends Parent here
  • 为什么在 this 方法中添加 If 语句会大大降低速度?

    我在中遇到过这个回答另一个问题 https stackoverflow com questions 12233594 faster way to apply alpha to a jpeg in an android app 我试图诊断哪些
  • Java中精确的时间测量

    Java 提供了两种获取当前时间的方法 System nanoTime and System currentTimeMillis 第一个给出的结果以纳秒为单位 但实际精度比这要差得多 许多微秒 JVM 是否已经为每台特定机器提供了最佳的价值

随机推荐

  • Android,我应该将 MediaPlayer 设为服务吗?

    我正在尝试编写一个 Android 应用程序 该应用程序将允许用户收听广播电台 我已经启动和停止按钮可以工作并且它可以播放流 如果我按主页键并开始使用手机执行其他操作 流将继续播放 这就是我希望它发挥作用的方式 我是否应该创建一个服务来播放
  • 宏增加值然后连接

    我想创建一个递归宏 它将创建 下一个 类 Example define PRINTME indexNum class m indexNum 1 The indexNum 1被评估为int 并且不会连接到类名 在连接之前 如何使编译器对其进行
  • Rails 在 save() 失败后不会回滚事务

    我有这个域模型 用户拥有一组项目 并且项目的状态可能无法通过验证 验证工作正常 我什至看到当我使用时会调用异常save 在我的控制器中 我有这个 user items lt lt item if user save render json
  • 在 graphql 中嵌套数据的正确方法是什么?

    我的数据库中有一个地址 我已将其放入location哈希 哈希包含单独的键streetAddress city state and zipCode 我已将数据像这样嵌套在我的 graphql 架构文件中 location streetAdd
  • 导入使用原始文件,但不在 IDLE 中

    10秒后更新现在已正确修复 感谢 JF 和 Gauden UPDATE我通过将 IDLE 文件保存在其他工作文件所在的目录中找到了临时修复程序 如果可以的话 我仍然想知道如何完全修复它 这不是永久修复 因此如果您想尝试并帮助使其在保存文件的
  • -webkit 和 -moz 浏览器中的字体大小不同

    检查这个jsfiddle 为什么日期选择器的大小存在差异font size被设定为1 5em em 的数量并不重要 我尝试了不同的字体大小 但仍然遇到同样的问题 红色框设置为 460px 您可以在其中看到 Firefox 和 chrome
  • 需要使用批处理从字符串中获取所需的数据

    我只需要提取给定字符串中的 URL 和应用程序 ID 并保存在变量中 url url ad ifwcash com www delivery afr php zoneid 127 cb 2015738640 app 61 最终结果如 var
  • GHCi 中函数的类型推断与从文件加载的不同

    我写了一个函数add in test hs add x y gt x y 然后我加载了test hs在 GHCi 版本 7 8 3 中 并输入 t add 观看什么类型add 是 结果看起来不正确 Main gt t add add Int
  • 将 Maven 项目作为依赖项添加到 Android Studio 应用程序

    我目前正在使用 Android Studio 1 2 开发 Android 应用程序 我想在我的 Android 应用程序中使用外部 Java 项目作为依赖项 该 Java 项目是一个 Maven 项目 如何将此项目作为依赖项直接添加到我的
  • NFC 标签检测后我的 cordova 应用程序未启动

    我在用Apache cordova构建 Android 应用程序 我提出了申请NFC特征 我们已经将数据写入 NFC 标签 其中mimetype myApp firstNFCApp 在我的应用程序中 每当检测到带有此标记的标签时mimety
  • MVVM 中的数据模板是否已过时?

    我创建了以下模型 简化了代码以说明情况 public abstract class Account public string Name get set public class Person Account public string F
  • 将 SOAP 与 Ruby 结合使用的最佳方式是什么?

    我的一位客户要求我将第 3 方 API 集成到他们的 Rails 应用程序中 唯一的问题是 API 使用 SOAP Ruby 基本上已经放弃了 SOAP 转而采用 REST 他们提供了一个 Java 适配器 显然可以与 Java Ruby
  • 将嵌套整数数组转换为平面整数数组 - javascript

    我的问题的工作背景是数据可视化 以这种方式将嵌套整数数组转换为平面整数数组是否正确 var inputArray 1 2 3 4 5 6 7 8 9 10 var inputArrayStr inputArray toString var
  • Python - 如何获取 CSV 文件中所有列的数据类型?

    我正在尝试从 CSV 文件中获取每列的所有数据类型 文件中没有关于数据类型的文档 手动检查将需要很长时间 它有 150 列 开始使用这种方法 df pd read csv tmp file csv gt gt gt df dtypes a
  • *Result 和 *ResultWCF 服务中指定的参数?

    在我的 WCF 服务中 我有一个函数 例如 bool ValidateLogin string user string password 在我将其托管在 Windows azure 并将引用添加到我的 Web 应用程序中后 该函数变为 bo
  • 输入样式=文件作为按钮

    我试图在 input file 又名上传器中添加一些样式 但我遇到了困难 是否有一些非 FLASH 解决方案 可能是 jquery 甚至是纯 JavaScript 这是可行的 但并不那么容易 您需要使用普通输入元素 按钮来模拟文件输入 并用
  • Java 中不同类型的泛型类的静态成员是否不同?

    Spence 问了这个上一个问题 那么 这在 Java 中是如何工作的呢 Java 中泛型类型在运行时会被丢弃 那么用不同泛型类型实例化的类的静态变量会发生什么情况呢 Java 中的静态成员不能具有来自包含它们的类的泛型类型参数 publi
  • 委托从模态呈现的视图控制器传回数据

    假设我们有两个视图控制器 一个带有标签的父视图控制器和一个带有表格视图的模态呈现子视图控制器 如何使用委托将用户在表视图中的选择传递回父级 视图控制器1 var delegate vc2delegate override func view
  • Slick-carousel 如何在通过 youtube api 打开视频时停止自动播放

    嗨 我在获得光滑的旋转木马时遇到了麻烦 http kenwheeler github io slick 当我在滑块内使用 YouTube 剪辑时停止自动播放 有人说我可以使用 onAfterChange 但仍然不知道如何在视频打开时关闭自动
  • RSA加密-字节数组和字符串之间的转换[重复]

    这个问题在这里已经有答案了 我正在尝试实现 RSA 加密 它能够执行以下操作 接受字符串值作为使用公钥加密的输入 以字符串形式返回加密的密码 接受加密密码作为使用私钥解密的输入 返回解密后的原始值 如果我直接解密 我就能使加密 解密工作by