'str = new String(bytes, "UTF8") ' 和 'bytes = str.getBytes("UTF8")' 中的字节值不同

2024-03-17

我可以看到它们与我创建字符串所用的字节不同! 我使用“AES/CBC/PKCS5Padding”来获取字符串。

public static void main(String[] args) {

    try {
        int randomNumber = CNStationQueueUtil.randInt(0, 99999);
        String key = "AES_KEY_TAKENUMB";
        byte[] bytes = EncryptHelper.encrypt(key, String.format("%%%d%%%d", 1001, randomNumber));
        String str = new String(bytes, "UTF8");
        System.out.println("str = " + str);
        System.out.println();
        byte[] utf8Bytes = str.getBytes("UTF8");
        printBytes(utf8Bytes, "utf8Bytes");

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

}



public class EncryptHelper {

    public static byte[] encrypt(String key, String value)
            throws GeneralSecurityException {

        byte[] raw = key.getBytes(Charset.forName("UTF-8"));
        if (raw.length != 16) {
            throw new IllegalArgumentException("Invalid key size.");
        }

        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec,
                new IvParameterSpec(new byte[16]));
        return cipher.doFinal(value.getBytes(Charset.forName("UTF-8")));
    }

    public static String decrypt(String key, byte[] encrypted)
            throws GeneralSecurityException {

        byte[] raw = key.getBytes(Charset.forName("UTF-8"));
        if (raw.length != 16) {
            throw new IllegalArgumentException("Invalid key size.");
        }
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");

        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, skeySpec,
                new IvParameterSpec(new byte[16]));
        byte[] original = cipher.doFinal(encrypted);

        return new String(original, Charset.forName("UTF-8"));
    }
}

当您将字符串解码为UTF-8这是因为您将字节编码为 UTF-8 或兼容的内容。你不能只拿一个byte[]随机字节并将其转换为字符串,因为它是二进制数据而不是文本。

您可以做的是使用 Base64 编码器处理二进制文件,并使用 Base64 解码器将其转换回原始字节。

执行此操作的一种巧妙方法是使用ISO-8859-1,但这通常是一个坏主意,因为您会混淆二进制和文本数据。

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

'str = new String(bytes, "UTF8") ' 和 'bytes = str.getBytes("UTF8")' 中的字节值不同 的相关文章

  • 从文件中读取未知长度的int数组

    如何从文件中读取未知长度的整数数组 我没有找到获取数组大小的方法 所以我尝试了一些临时字符串的东西 但我的代码爆炸了 有更好的想法吗 Use std vector std ifstream inFile fileName std vecto
  • 使用 OkHttp 下载损坏的文件

    我编写的下载文件的方法总是会产生损坏的文件 public static String okDownloadToFileSync final String link final String fileName final boolean te
  • 如何使用 Java 引用释放 Java Unsafe 内存?

    Java Unsafe 类允许您按如下方式为对象分配内存 但是使用此方法在完成后如何释放分配的内存 因为它不提供内存地址 Field f Unsafe class getDeclaredField theUnsafe Internal re
  • 为什么该字符串的长度比其中的字符数长?

    这段代码 string a abc string b A C Console WriteLine Length a 0 a Length Console WriteLine Length b 0 b Length outputs Lengt
  • Powershell XMLDocument保存为无BOM的UTF-8

    我构建了一个 System Xml XmlDocument 类型的 XML 对象 scheme gettype IsPublic IsSerial Name BaseType True False XmlDocument System Xm
  • 为什么 jar 执行的通配符在 docker CMD 中不起作用?

    我有一个Dockerfile与以下CMD启动我的 Spring Boot 应用程序 FROM java 8 jre CMD java jar app file jar 当我尝试从创建的图像启动容器时 我得到 Error Unable to
  • Java AES 256 加密

    我有下面的 java 代码来加密使用 64 个字符密钥的字符串 我的问题是这会是 AES 256 加密吗 String keyString C0BAE23DF8B51807B3E17D21925FADF273A70181E1D81B8EDE
  • ThreeTen 向后移植与 JSR-310 的比较

    由于某些原因 我们现在无法使用 java 8 我们仍然停留在 java 7 上 不过 我想使用新的JSR 310 date time APIs现在 使用官方向后移植 ThreeTen http www threeten org threet
  • 2^31 次方的 Java 指数错误 [重复]

    这个问题在这里已经有答案了 我正在编写一个java程序来输出2的指数幂 顺便说一句 我不能使用Math pow 但是在 2 31 和 2 32 处我得到了其他东西 另外 我不打算接受负整数 My code class PrintPowers
  • 如何在 IntelliJ IDEA 中运行 akka actor

    来自 Akka 网站文档 然后 这个主要方法将创建所需的基础设施 运行演员 启动给定的主要演员并安排 一旦主要参与者终止 整个应用程序就会关闭 因此 您将能够使用类似于以下的命令运行上面的代码 下列的 java classpath akka
  • Android 认为我没有关闭数据库!为什么?

    我有一个 SQLiteDatabase 数据成员 我在 onCreate 中初始化它 并在 onPause onStop 和 onDestroy 中调用 close 它在 onResume 中重新初始化 它似乎运行得很好 但当我查看调试器时
  • 在 Scala 中将元素追加到列表末尾

    我无法添加 type 元素T到一个列表中List T 我尝试过myList myElement但它似乎创建了一个奇怪的对象并访问myList last始终返回放入列表中的第一个元素 我怎么解决这个问题 List 1 2 3 4 Result
  • 在java程序中使用c++ Dll

    我正在尝试使用System LoadLibrary 使用我用 C 编写的一个简单的 dll UseDllInJava java import com sun jna Library import com sun jna Native imp
  • 将字节数组转换为托管结构

    更新 这个问题的答案帮助我编写了开源项目GitHub 上的 AlicanC 现代战争 2 工具 https github com AlicanC AlicanC s Modern Warfare 2 Tool 你可以看到我是如何阅读这些数据
  • 按降序排序映射java8 [重复]

    这个问题在这里已经有答案了 private static
  • Tomcat 6 未从 WEB-INF/lib 加载 jar

    我正在尝试找出我的 tomcat 环境中的配置问题 我们的生产服务器正在运行 tomcat 安装并从共享 NFS 挂载读取战争 然而 当我尝试使用独立的盒子 及其配置 进行同样的战争时 我收到下面发布的错误 有趣的是 如果我将 WEB IN
  • Lombok 不适用于 Eclipse Neon

    我下载了lombok jar lombok 1 16 14 jar 并将其放入我的下载中 然后我点击这个 jar 执行正确地识别了我的 MacOS 上的 Eclipse 实例 然后我选择了我想要的实例 Lombok也在pom xml中指定
  • 用于请求带有临时缓存的远程 Observable 的 RxJava 模式

    用例是这样的 我想暂时缓存最新发出的昂贵的Observable响应 但在它过期后 返回到昂贵的源Observable并再次缓存它 等等 一个非常基本的网络缓存场景 但我真的很难让它工作 private Observable
  • Spring Data Rest 多对多 POST

    首先 让我解释一下我的用例 这非常简单 有一个用户实体和一个服务实体 我使用 UserService 作为连接实体 连接表 在用户和服务之间建立多对多关联最初 会有一些用户集和一些服务集 用户可以在任何时间点订阅任何服务 在这种情况下 将向
  • 带 getClassLoader 和不带 getClassLoader 的 getResourceAsStream 有什么区别?

    我想知道以下两者之间的区别 MyClass class getClassLoader getResourceAsStream path to my properties and MyClass class getResourceAsStre

随机推荐

  • Apache下载php文件而不是执行脚本

    我刚刚在运行 10 6 Apache2 PHP Mysql 的新 Mac 上设置了本地 Web 服务器 一切似乎都工作正常 除了当我导航到SOME 不是大多数 页面 Apache 下载 php 文件而不是执行它们 我认为这可能与 php 执
  • 布尔玛进度文本位于中间

    为什么当我使用 Bulma CSS 框架的进度时 https bulma io documentation elements progress https bulma io documentation elements progress 我
  • 无法在 MySQL Workbench 5.2.40 中创建表

    我刚刚创建了一个新架构并想要创建一个新表 当我右键单击我创建的 2myschema 并选择 新表 时 我为要创建的表指定了名称 但出现以下错误 我搜索了该错误 发现原因是我输入了保留字 例如 order 但 table2 不可能是保留字 并
  • HashSet为什么要排序? [复制]

    这个问题在这里已经有答案了 我正在学习 Java 中的容器 最近我读到 HashSet 没有按顺序给出元素 有什么有趣的Integer我随机制作的 HashSet 已排序 当我将其类型更改为Double打印的 HashSet 不再排序 我的
  • 编辑 ELF 文件中的变量值?

    我需要更改已编译的 ELF 文件中的几个变量 为了清楚地解释这一点 我将使用一个简单的 C 结构作为示例 单个源文件被编译并从 MyFile c 链接 0x1000 到 MyFile elf typedef struct uint32 t
  • DataGrid 的 CellEditingTemplate 和编辑模式下的焦点

    我在使用 WPFToolkit 时遇到问题DataGrid当定制色谱柱同时提供两者时CellTemplate and CellEditingTemplate 如果你看下面 你会看到我的编辑模板有一个CheckBox 从功能上来说一切都很好
  • Xcode 4 的隐藏功能

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 现在 Xcode 4 已正式发布 是时候跟进我之前的问题了 Xcode 的隐藏功能 https
  • WordPress API:添加/删除帖子上的标签

    我知道这似乎是一个简单的操作 但我找不到任何资源或文档来解释如何使用帖子 ID 以编程方式向帖子添加和删除标签 下面是我正在使用的示例 但它似乎覆盖了所有其他标签 function addTerm id tax term term id i
  • Bootstrap 3:防止模态内部的模态每次触发(hidden.bs.modal)

    我有一个模态位于另一个模态中 并且我设法使内部模态关闭而不影响另一个模态 问题是 当第二个模式关闭时 它会触发 hidden bs modal 事件本身和第一个模型
  • Android 模拟器不显示印地语字体

    我在模拟器上将语言环境更改为 hi IN 当我在模拟器上启动应用程序 甚至主屏幕 时 我看到的只是让人想起 我不知道如何渲染此字体 的框 任何关于为什么会发生这种情况以及如何消除这种情况的意见都是非常受欢迎的 我需要显示印地语字体以测试我的
  • 由于协议不匹配而阻止 iframe

    我正在尝试将值从父窗口发送到按钮上的框架click事件 但它在控制台上显示错误 未捕获的安全错误 阻止了具有来源的帧 http 本地主机 53838 http localhost 53838 访问来源为 null 的框架 请求访问的帧具有
  • 有一个用于反应本机选择器的占位符

    有没有办法在用户单击它之前显示反应本机选择器的占位符 我们的想法是有一个选择器显示 国籍 一旦您单击并选择您的国家 地区 它就会呈现该国家 地区 我想在不将 国籍 作为选择器中的可用选项的情况下执行此操作 将第一个孩子放置为
  • 在 WooCommerce 中的简短描述之前显示自定义产品字段

    在简短描述之前 我在 WooCommerce 中添加新字段时遇到问题 我在中使用了脚本functions php我的新自定义字段显示正确 但是 使用脚本时简短描述消失 新字段显示正常 我可以编辑产品页面上字段的内容 但无法删除它 它始终是最
  • Ubuntu 10.1下如何识别多个USB串口适配器

    我正在 Ubuntu 10 1 下从多个相同的 USB 串行适配器读取数据 有时 它们的 dev tty 路径会发生变化 例如 如果在启动时连接了其他 USB 设备 我需要一种通过任何此类更改重复引用同一适配器的方法 据 udevadm 称
  • XInclude 的替代方案

    据我所知没有支持XInclude在 net中 我想利用同样的机制来分层组织 XML 配置文件 我的意思是我有一个引用特定 Xml 文件的顶级 XML 配置文件 我的配置是专用于一个特定模块的一组配置 我该怎么办呢 或者也许为什么我不应该这样
  • 如何在 Azure DevOps 中为 Node.js Web 应用创建发布管道?

    我想通过创建发布管道 在 Azure DevOps 上启用 Node js 应用程序的持续部署 我怎样才能做到这一点 当我写一年前的答案时 Azure DevOps 没有用于构建管道的 Web 应用程序部署任务 因此必须使用发布管道来完成
  • Rebol 中的“reword”功能是什么以及如何使用它?

    我看到有人提到reword今天可以使用 但是它的文档非常简短 它看起来像 shell 脚本环境变量替换 或者可能是正则表达式替换 但有所不同 我该如何使用这个功能以及我会遇到什么样的问题 这里有龙 The rewordfunction 是一
  • 限制 top 命令仅在命令行上显示前 X 个进程 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我不确定为什么没有选项top命令执行此操作 因为这似乎是一个自然的请求 如果我通过管道输出top to head 然后列表不会更新 并且我
  • 在 Twitter 上分享时 GIF 没有动画

    我正在创建动画 GIF 文件NSArray of UIImage 并将其保存在NSDocumentDirectory以及 iPhone 相册中 我面临的问题是 当我在电子邮件编辑器或 iMessage 中打开保存的 GIF 时 它的动画效果
  • 'str = new String(bytes, "UTF8") ' 和 'bytes = str.getBytes("UTF8")' 中的字节值不同

    我可以看到它们与我创建字符串所用的字节不同 我使用 AES CBC PKCS5Padding 来获取字符串 public static void main String args try int randomNumber CNStation