Java 和 Android 之间的 Base64 编码/解码错误

2024-01-26

我在 Java 和 Android 之间编码/解码 Base64 时遇到问题。

这是我的案例:

我在Java上使用ECC编写了加密/解密代码,我的代码运行得很好。

然后我尝试在Java上加密字符串并在Android上解密这个加密的字符串,但失败了。

我认为问题可能是 Base64 编码/解码。

这是我的代码:

仅在 Java 上加密/解密:

  //ENCRYPT
try {
        Cipher c = Cipher.getInstance("ECIES",BouncyCastleProvider.PROVIDER_NAME);
        c.init(Cipher.ENCRYPT_MODE,publicKey);
        encodeBytes = c.doFinal(origin.getBytes());

        String encrypt = Base64.getEncoder().encodeToString(encodeBytes);

        System.out.println("Encrypt:"+ encrypt+"\n");


    } catch (Exception e) {
        e.printStackTrace();
    }

//////DECRYPT
    try
    {
        String abc = Base64.getDecoder().decode(encrypt);
        Cipher c = Cipher.getInstance("ECIES","BC");
        c.init(Cipher.DECRYPT_MODE,privateKey);
        //decodeBytes = c.doFinal(encodeBytes);
        decodeBytes = c.doFinal(abc);
        String deCrypt = new String(decodeBytes,"UTF-8");

        System.out.println("Decrypt:"+ deCrypt +"\n");
    }
    catch (Exception ex)
    {
        ex.printStackTrace();
    }

这是我的结果:

private key: EC Private Key [eb:bc:b0:30:f0:42:4e:f1:0f:c5:6a:49:22:93:51:72:ea:23:0c:9a]
        X: c55275cd4a40690ec8d5333cd31994e3066d7f49f57df6c3aed20385c6b50325
        Y: b1a2c67c9c3ac8b8508e210cb2ac476999a913b85e283359fd4482d68164c7e9


public key: EC Public Key [eb:bc:b0:30:f0:42:4e:f1:0f:c5:6a:49:22:93:51:72:ea:23:0c:9a]
        X: c55275cd4a40690ec8d5333cd31994e3066d7f49f57df6c3aed20385c6b50325
        Y: b1a2c67c9c3ac8b8508e210cb2ac476999a913b85e283359fd4482d68164c7e9


Encrypt:BG+pFzDgRLhTI44Rj9w3zkTprPqTryOrqP8xfrS7tb5H3e0KGoxyq/e5SngwQeAr91aGBn6jAUNupwqEihYta7epTtpLP84d7LFxgTJs+bsYgu3WskadiLSImjigzLM1g/VgZ2PWk1Y7idAX

Decrypt:63B952562----0907888511

然后我在Android上编写了解密字符串的代码,但是Android没有这个方法:

Base64.getDecoder().decode(String);

我必须用这个替换它:

byte[] encodeBytes = null;
encodeBytes = Base64.encode(my_encrypted_string.getBytes(),Base64.DEFAULT);
Cipher c = Cipher.getInstance("ECIES","SC");
c.init(Cipher.DECRYPT_MODE,privateKeyFromFile);
decodeBytes = c.doFinal(encodeBytes);
String deCrypt = new String(decodeBytes,"UTF-8");
txtHiden.setText(deCrypt);
Toast.makeText(activity, deCrypt, Toast.LENGTH_SHORT).show();

但它显示了这个错误:

10-03 09:50:24.466 13134-13134/com.example.napoleon.luanvana W/System.err: org.spongycastle.jcajce.provider.util.BadBlockException: unable to process block

这似乎是一个简单的错误。 你替换了

String abc = Base64.getDecoder().decode(encrypt);

with

byte[] encodeBytes = null;
encodeBytes = Base64.encode(my_encrypted_string.getBytes(),Base64.DEFAULT);

如果我读得正确的话。尝试将其替换为decode https://developer.android.com/reference/android/util/Base64.html#decode(java.lang.String,%20int)反而。

由于密文在尝试解密之前经过 Base64 编码两次而不是解码,因此解密失败并出现您向我们展示的错误。

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

Java 和 Android 之间的 Base64 编码/解码错误 的相关文章

  • 如何使用正则表达式验证 1-99 范围?

    我需要验证一些用户输入 以确保输入的数字在 1 99 范围内 含 这些必须是整数 Integer 值 允许前面加 0 但可选 有效值 1 01 10 99 09 无效值 0 007 100 10 5 010 到目前为止 我已经制定了以下正则
  • org/codehaus/plexus/archiver/jar/JarArchiver(不支持的major.minor版本49.0)-Maven构建错误

    下午大家 我在尝试构建项目时收到上述错误 我很确定这与使用 Java 1 6 编译的 Maven 最新更新有关 而我们尝试构建的项目是 1 4 项目 在此之前的插件工作没有问题 因此我将以下内容添加到 POM xml 文件中以尝试强制使用现
  • 从直方图计算平均值和百分位数?

    我编写了一个计时器 可以测量任何多线程应用程序中特定代码的性能 在下面的计时器中 它还会在地图中填充花费了 x 毫秒的调用次数 我将使用这张图作为我的直方图的一部分来进行进一步的分析 例如调用花费了这么多毫秒的百分比等等 public st
  • 如何将 Android 添加到 Phonegap 平台版本 3

    经过大量挖掘 我相信这个问题 https stackoverflow com questions 18423444 phonegap 3 doesnt work with andriod studio与我没有添加任何用于构建phonegap
  • 移动设备上的 TensorFlow(Android、iOS、Windows Phone)

    我目前正在寻找不同的深度学习框架 特别是用于训练和部署卷积神经网络 要求是 它可以在带有 GPU 的普通 PC 上进行训练 但训练后的模型必须部署在三个主要的移动操作系统上 即 Android iOS 和 Windows Phone Ten
  • 我们如何测试包私有类?

    我正在看书Effective Java in Item 13 Minimize the accessibility of classes and members 它提到 为了方便测试 您可能想让类 接口或成员更易于访问 这在某种程度上是好的
  • Java - 从 XML 文件读取注释

    我必须从 XML 文件中提取注释 我找不到使用 JDOM 或其他东西来让它们使用的方法 目前我使用 Regex 和 FileReader 但我不认为这是正确的方法 您可以使用 JDOM 之类的东西从 XML 文件中获取注释吗 或者它仅限于元
  • Android模拟器中的网络访问

    我试图通过我的 Android 应用程序访问互联网 但我既成功又失败 我在构建应用程序时启动模拟器 并且应用程序安装得很好 我可以使用浏览器访问互联网 但是 当我尝试这个小代码片段时 InetAddress inet try inet In
  • IntelliJ 组织导入

    IntelliJ 是否具有类似于 Eclipse 中的组织导入功能 我拥有的是一个 Java 文件 其中多个类缺少导入 例子 package com test public class Foo public Map map public J
  • Android SearchView 在启动时隐藏键盘

    我有一个小问题正在尝试解决 当我打开应用程序时 键盘会显示输入搜索视图的查询 不过 我只想在单击搜索视图时显示键盘 我该如何解决 Thanks 这对我有用 用于隐藏焦点的代码 searchView SearchView view findV
  • Android:GestureDetector 无法与选项卡(TabActivity、Tabwidget)一起工作(gestureDetector.onTouchEvent(event) 始终为 false)

    我已经用不同的子活动实现了 TabActivity intent new Intent setClass this MyChildTabActiviy class Initialize a TabSpec for each tab and
  • 离子初始加载时间

    我正在使用 Ionic 构建一个简单的应用程序 但我的应用程序在冷启动时的初始加载时间方面存在性能问题 这是我所做的 collection repeat 代替带有 track by 的 ng repeat 原生滚动 overflow scr
  • Android 标记如何实现拖放?

    你好 我正在 Android 中开发 MapView 应用程序 我有三个标记 我希望稍后能够使用 Google Map API getlocation function 为了尝试一下 我想使用拖放功能移动标记 然后检查位置 任何人都可以通过
  • 禁用 Android 菜单组

    我尝试使用以下代码禁用菜单组 但它不起作用 菜单项仍然启用 你能告诉我出了什么问题吗 资源 菜单 menu xml menu menu
  • ECDH使用Android KeyStore生成私钥

    我正在尝试使用 Android KeyStore Provider 生成的私有文件在 Android 中实现 ECDH public byte ecdh PublicKey otherPubKey throws Exception try
  • 何时在 hibernate 中使用 DiscriminatorValue 注解

    在 hibernate 中使用 DiscriminatorValue 注释的最佳场景是什么以及何时 这两个链接最能帮助我理解继承概念 http docs oracle com javaee 6 tutorial doc bnbqn html
  • ArrayList.clear() 和 ArrayList.removeAll() 有什么区别?

    假如说arraylist定义为ArrayList
  • 将对象从手机共享到 Android Wear

    我创建了一个应用程序 在此应用程序中 您拥有包含 2 个字符串 姓名和年龄 和一个位图 头像 的对象 所有内容都保存到 sqlite 数据库中 现在我希望可以在我的智能手表上访问这些对象 所以我想实现的是你可以去启动 启动应用程序并向左和向
  • 如何使用通配符模拟泛型方法的行为

    我正在使用 EasyMock 3 2 我想基于 Spring Security 为我的部分安全系统编写一个测试 我想嘲笑Authentication http docs spring io autorepo docs spring secu
  • 如何访问我的 Android 程序中的联系人

    我正在制作一个短信应用程序 并且想要访问我的 Android 应用程序中的联系人 我想访问联系人 就像他们在实际联系人列表中一样 选择后 我需要返回到我的活动 在其中我可以向该人发送短信 或者是否可以访问存储联系人的数据库 我的代码如下所示

随机推荐

  • 单击按钮后在 html id 中插入文本(无 JavaScript)

    我想在按下按钮后在文本框 ID button3 中包含一些文本 我有以下 html div style display none span text before pressing the button gt span div 在 java
  • 使用 knockoutjs + twitter bootstrap 跟踪标签

    我试图跟踪视图模型中选定的选项卡 但我似乎无法使其工作 在以下代码中 当您单击选项卡时 标题将正确更新 但不会显示选项卡的内容 如果您删除 click parent selectSection然后显示内容但标题不会更新 现在如果你删除dat
  • 使用另一个本地存储库更新本地 Git 存储库

    我有两个本地 Git 存储库 我使用以下命令从另一个克隆了一个 git clone path to local repo 1 我对每个 Git 存储库做了一些更改 现在我想将 local repo 1 的更改合并 更新到 local rep
  • 如何进行“group by/max”查询?

    我需要按 Field1 的值对所有记录进行分组 并计算每个组的 Field2 的最大值 那么 有什么方法可以使最大聚合在同一查询中的多个组上工作吗 GET yourindex search search type count aggs yo
  • Spark Standalone:TransportRequestHandler:调用 RpcHandler 时出错 - 在不同机器/虚拟机上启动工作程序时

    我对此完全陌生 所以如果有明显的错误 请原谅 确切的错误 在从站 INFO TransportClientFactory 69 毫秒后成功创建到 10 2 10 128 7077 的连接 引导程序中花费了 0 毫秒 警告工作器 无法连接到主
  • 导入错误:没有名为 typedefs 的模块

    我正在尝试使用 pyinstaller 创建一个独立程序 在此过程中 我遇到以下错误消息 Traceback most recent call last File
  • 使用 Collective.dexteritytextindexer 扩展 SearchableText

    我正在尝试扩展我的内容类型的 SearchableText 索引 我通过在模型文件中将多个字段标记为 indexer searchable true 成功地包含了多个字段 但是我无法从我的类型的 py 扩展 SearchableText 如
  • 创建与现有表具有相同表结构的 Oracle 临时表

    如何创建与现有表具有相同表结构的全局临时表 我知道这个概念在 SQL Server 中可用 例如 select into temp123 from abc 但我想在 Oracle 中执行相同的操作 Create global tempora
  • OpenGL:调用 glewInit() 后,glGetError() 返回无效枚举

    我使用 GLEW 和 freeglut 由于某种原因 调用 glewInit 后 glGetError 返回错误代码 1280 即使 glewExperimental GL FALSE 也是如此 我无法编译着色器 glGetProgramI
  • jQuery 在控制台中工作,但在原始代码中不工作

    我尝试使用以下代码将 href 添加到 td 内的 a 标记 当我在控制台中时它工作正常 但是当我在代码中尝试相同的操作时 它不起作用 谁能告诉我原因吗 table tr td a Hai a td tr table 使用 document
  • 如何将环境详细信息移至 EAR 之外

    我们的项目是一个中型 Web 应用程序 在 WAS 6 1 hibernate struts 上使用 RAD 7 0 开发 现已投入生产 目前 我们已将生产系统的 IP 地址硬编码在属性文件中 并将数据库架构详细信息硬编码在 hiberna
  • Swift 3 中的 UnsafePointer 初始化器

    我有一个收据验证类 自 Swift 3 发布以来已被弃用 我解决了一些问题 但仍然有很多 这是我使用的 GitHub 源代码 https gist github com baileysh9 4386ea92b047d97c7285 file
  • MySQL 开源报告服务

    我目前正在从事一个需要报告服务的项目 数据库后端是使用 MySQL 构建的 我希望有一个具有与 SSRS 类似功能的东西 有谁有这方面的开源解决方案的经验吗 他们有什么特别推荐的吗 必须通过浏览器访问它 Thanks David 当您说 报
  • 无法使用GDB进行远程调试

    我正在尝试使用 gdb 调试目标 但遭到拒绝 gdb 目标远程10 0 0 2 2345 使用10 0 0 2 2345进行远程调试 警告 架构拒绝了目标提供的描述 远程 g 数据包回复太长 00000000ba4eefbe00000000
  • 仅在 IE < 9 中按下“输入”时命令按钮不会提交

    我有2个
  • 在 M-x 编译中使用当前缓冲区的文件名

    我希望 emacs 使用当前缓冲区的文件名作为传递给的命令的一部分M x compile 例如 如果我正在编辑 foo rb 我想M x compile执行ruby foo rb 我尝试设置compilation command to li
  • 天数和总天数之间有什么区别?

    谁能告诉我 C 中这两个函数有什么区别 TotalDays 和 Days 因为我不确定应该在代码中使用哪一次 抱歉 这篇文章的信息量很少 但我能说的不多 由于我没有找到重复的内容 所以我在这里发表评论 始终阅读文档 http msdn mi
  • 如何在android中从互联网获取当前时间

    我正在制作一个应用程序 我想在其中从互联网获取当前时间 我知道如何使用设备获取时间System currentTimeMillis 即使经过很多搜索 我也没有得到任何关于如何从互联网获取它的线索 您可以使用以下程序从互联网时间服务器获取时间
  • MIPS 浮点:swc1 与 s.s

    我正在做一些涉及的工作MIPS汇编 我不断遇到这四个浮点加载 存储伪指令 l s l d s s s d 我在网上找到了一些文档 发现有四个 实际 指令似乎可以做同样的事情 lwc1 ldc1 swc1 and sdc1 我唯一的问题是 有
  • Java 和 Android 之间的 Base64 编码/解码错误

    我在 Java 和 Android 之间编码 解码 Base64 时遇到问题 这是我的案例 我在Java上使用ECC编写了加密 解密代码 我的代码运行得很好 然后我尝试在Java上加密字符串并在Android上解密这个加密的字符串 但失败了