AES 256 加密 - Java 的 Qt 等效项

2023-11-26

我已经实现了 AES 256 加密方法,并且在 Java 中运行良好,如下所示!

  private static final byte[] IV = {
    0, 2, 4, 8, 16, 32, 64, 127, 
    127, 64, 32, 16, 8, 4, 2, 0
};

  //actual encryption over here
  private static byte[] encrypt(byte[] raw, byte[] clear) throws 
Exception {  
    SecretKeySpec skeySpec = new SecretKeySpec(raw,  "AES");  
    Cipher cipher = null;

    if(isIVUsedForCrypto) {
        cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, new IvParameterSpec(IV));  
    }
    else 
    {
        cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec);  
    }
    byte[] encrypted = cipher.doFinal(clear);  
    return encrypted;  
}  

从上述方法返回的字节数组最终使用以下方法转换为十六进制字符串toHex方法。

      public static String toHex(byte[] buf) {  
    if (buf == null)  
        return "";  
    StringBuffer result = new StringBuffer(2*buf.length);  
    for (int i = 0; i < buf.length; i++) {  
        appendHex(result, buf[i]);  
    }  
    return result.toString();  
}  
private final static String HEX = "0123456789ABCDEF";  
private static void appendHex(StringBuffer sb, byte b) {  
    sb.append(HEX.charAt((b>>4)&0x0f)).append(HEX.charAt(b&0x0f));  
}  

所以使用Java AES 256加密代码的最终结果是一个十六进制字符串。

现在对于 Qt 部分,

  QByteArray IV("0, 2, 4, 8, 16, 32, 64, 127,127, 64, 32, 16, 8, 4, 2, 0");


 QString encrypt(QByteArray r, const QString &password)
 {
const char *sample = r.data();
string plain = password.toStdString();
string ciphertext;
// Generate Cipher, Key, and CBC
byte key[ AES::MAX_KEYLENGTH ], iv[ AES::BLOCKSIZE ];
StringSource( reinterpret_cast<const char *>(sample), true,
              new HashFilter(*(new SHA256), new ArraySink(key, AES::MAX_KEYLENGTH)) );
memset( iv, 0x00, AES::BLOCKSIZE );
CBC_Mode<AES>::Encryption Encryptor( key, sizeof(key), iv );
StringSource( plain, true, new StreamTransformationFilter( Encryptor,
              new HexEncoder(new StringSink( ciphertext ) ) ) );
return QString::fromStdString(ciphertext);
} 

从 main 方法中我调用上面的函数

        QString encrypted = encrypt(result, "test");

其中“结果”是QByteArray我将其传递给加密,就像在 java 中所做的那样。

Java 和 Qt 中的字节数组的获取方式相同。我已经证实了这一点。

我的问题

Qt 的加密逻辑尤其在某个地方失败了,因为HEX通过 Java 和 Qt 获得的结果不匹配。

谁能告诉我 Qt 部分做错了什么。我没有使用吗IV or the QByteArray result正确吗?


我猜你的 Java 实现错过了密钥上的哈希步骤。我正在使用密钥的 SHA256 哈希值。要测试 C++ 实现,请将代码更改为:

QString encrypt(QByteArray r, const QString &password)
 {
const char *sample = r.data();
string plain = password.toStdString();
string ciphertext;
// Generate Cipher, Key, and CBC
byte key[ AES::MAX_KEYLENGTH ], iv[ AES::BLOCKSIZE ];
//StringSource( reinterpret_cast<const char *>(sample), true,
//              new HashFilter(*(new SHA256), new ArraySink(key, AES::MAX_KEYLENGTH)) );
for(int i=0; i< AES::MAX_KEYLENGTH; ++i){
    key[i] = reinterpret_cast<const char *>(decodedKey)[i];
}
memset( iv, 0x00, AES::BLOCKSIZE );
CBC_Mode<AES>::Encryption Encryptor( key, sizeof(key), iv );
StringSource( plain, true, new StreamTransformationFilter( Encryptor,
              new HexEncoder(new StringSink( ciphertext ) ) ) );
return QString::fromStdString(ciphertext);
} 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AES 256 加密 - Java 的 Qt 等效项 的相关文章

  • 如何从 REstAssured 中的 Json 数组获取 JSON 对象

    任何人都可以帮我解决这个场景 我是新来的RestAssured和处理JSON在我们的自动化脚本中 我有一个API谁的回应是JSONArray i e id 1002 entity testcase fieldName TextName di
  • 从套接字读取 C HTTP

    我想知道如何判断是否已从套接字接收到所有数据 这是一个简单的网络代理 现在我正在处理请求部分 所以发送的内容应该以 r n r n 结尾 我不知道请求会持续多久 我在这里读过一些帖子 说我应该检查读取函数是否返回 0 但其他人说0只在客户端
  • 如何在Azure功能中添加razor视图文件?

    我正在创建一个应用程序 它是 azure 函数项目 我想在该项目中使用 Razor 视图 我应该在 azure 函数中使用任何模板引擎吗 得益于一些方面的进步剃刀之光项目 https github com toddams RazorLigh
  • 根据结果​​重试方法(而不是异常)

    我有一个具有以下签名的方法 public Optional
  • 获取运行时生成的类的字节

    我正在使用一个 Java 框架 该框架使用自定义类加载器在运行时生成一些 代理 类 我想为任何这样的类获取自定义 ClassLoader 从 loadClass 返回的与该类对应的原始字节数组 这可能吗 我知道 如果一个类作为资源存在 那么
  • 将 Class 对象转换为字节

    如果我有一个Class http java sun com j2se 1 5 0 docs api java lang Class html在运行时实例 我可以获得它的 byte 表示形式吗 我感兴趣的字节将在类文件格式 http java
  • 三种 System.Drawing 方法表现出缓慢的绘制或闪烁:解决方案?或其他选择?

    我正在通过 System Drawing 进行一些绘图 但遇到了一些问题 我将数据保存在队列中 并将该数据绘制 绘制 到三个图片框中 此方法填充图片框 然后滚动图形 所以不要在以前的绘图上绘制 并且逐渐看起来更混乱 我找到了两种绘制图表的解
  • Java字符串中的字符数[重复]

    这个问题在这里已经有答案了 可能的重复 Java 使用unicode上划线显示平方根时字符串的长度 https stackoverflow com questions 7704426 java length of string when u
  • Spring @Configuration如何缓存对bean的引用

    使用基于 Java 的配置时 Spring 如何防止再次调用 bar 我想知道编译时注释处理或通过代理方法 Configuration public class AppConfig Bean public Foo foo return ne
  • 如何在其他窗口之上生成独立的 JFileChooser 对话框?

    Like 其他一些人 https stackoverflow com questions 4161207 javavm windows 7 64bit jfilechooser not showing dialog box谁问过类似的问题
  • 我可以对(非成员)函数使用部分模板特化吗?

    我试图在 非成员 函数上使用部分模板专业化 但我在语法上遇到了问题 我在 StackOverflow 中搜索了其他部分模板专业化问题 但这些问题涉及类或成员函数模板的部分专业化 作为起点 我有 struct RGBA RGBA uint8
  • 我可以从同一个 jar 文件执行两个不同的类吗?

    我有一个项目 在一个包中我制作了服务器 在第二个包中我制作了客户端 它运行良好 我想创建一个 Jar 文件 是否可以使用同一个 jar 文件分别运行客户端和服务器 我使用了只有一个 main 的 jar 文件 当我运行 jar 文件时 它会
  • 为什么未到达的 try-catch 块会增加运行时间?

    我目前正在创建自己的容器库 但我已经看到无法访问 if 语句无效 try catch阻止增加运行时间 这是我的测试 Vector cpp template
  • 使用 _Alignas 进行结构成员对齐

    我想知道以下问题 是新的吗 Alignas结盟 C11 中的说明符适用于结构成员吗 我一直假设这么多 但彻底阅读了 N1570 公开草案似乎表明对齐说明符不能 出现在一个说明符限定符列表 这就是我所期望的 如果得到支持的话 我已经读过几遍语
  • 如何组合||条件语句中的运算符[重复]

    这个问题在这里已经有答案了 代替 if foo 1 foo 5 foo 9 我喜欢将它们组合起来 类似于以下内容 这不起作用 if foo 1 5 9 那可能吗 不幸的是不是 你最好的选择是创建一个扩展方法 public static bo
  • 如何创建和使用类箭头运算符? [复制]

    这个问题在这里已经有答案了 因此 在到处研究之后 我似乎找不到如何创建类箭头运算符 即 class Someclass operator gt 我只需要知道如何使用它并正确使用它 它的输入是什么 它返回什么 我如何正确地声明 原型化它 运算
  • LinkedBlockingQueue 抛出 InterruptedException

    我有这段代码 ALinkedBlockingQueue应该只抛出一个Exception如果在等待添加到队列时被中断 但这个队列是无限的 所以它应该尽快添加 为什么我的关闭方法会抛出一个InterruptedException private
  • Selenium Webdriver 中的 IF 语句

    我想知道是否有人可以帮助我解决我正在尝试解决的问题以及 Java 中 Webdriver 的 If 语句 当登录到我正在测试的应用程序时 可以在主页之前进入安全问题页面 如果是新用户等 我希望测试中的代码做的是 如果出现安全问题页面 请填写
  • 如何使用 Ioc Unity 注入依赖属性

    我有以下课程 public interface IServiceA string MethodA1 public interface IServiceB string MethodB1 public class ServiceA IServ
  • PyQt QFileDialog exec_ 很慢

    我正在使用自定义QFileDialog因为我想选择多个目录 但是exec 功能非常慢 我不明白为什么 我正在使用最新版本的 PyQt 代码片段 from PyQt4 import QtGui QtCore QtNetwork uic cla

随机推荐

  • Chromium 和 Firefox 显示颜色不同,我不知道哪一个做得对

    我一直在 Ubuntu 17 10 下构建一个网站 并使用 Firefox 和 Chromium 进行测试 这两个浏览器显示的颜色完全不同 不仅是图像 而且是所有颜色 我一直认为是 Chromium 出于某种原因错误地使它们过度饱和 所以到
  • 在 mac os x 环境中对可执行应用程序文件进行签名的方法或技术有哪些?

    我想使用自签名证书对 app 文件或 ipa 文件等 mac 操作系统可执行文件进行签名 以用于开发目的 我不打算在 ios 或 mac 应用商店中发布签名的应用程序 我想将其开发为一个工具 那么有哪些可用选项呢 我不想使用 Xcode 的
  • 是否可以获得变量的最大可能长度

    我想知道 plsql 中是否存在给出变量最大长度的函数 例如 如果我声明 DECLARE varia VARCHAR2 7 BEGIN call of a function that would return 7 END 即使 varia
  • 如何在 WP8 上突出显示 LongListSelector 中的选定项目?

    如何在 Windows Phone 8 上的新 LongListSelector 中突出显示所选项目 事实上 如果我点击列表中的一项 什么也不会发生 我的列表仅包含一个简单的字符串 它将通过 TextBlock 显示 但我想强调的是用户的选
  • 为 flex-wrap 添加动画

    当谈到换行点时 我们如何添加动画 也许这可以帮助 我们有一个标题 在该标题的内部有一个带有 flex attr 的容器 当我们从下到上调整浏览器大小时 或者当我们改变浏览器的高度时 这些项目突然重塑形状 方向是列 我只想向此事件添加动画 谢
  • 仅在媒体打印的最后打印页中打印页脚

    我需要打印多页 页脚需要打印在最后一页底部 我已经为页脚添加了 css 如下所示 footer display block width 100 position absolute left 0 bottom 0px 问题是页脚正在打印第一页
  • 如何用实验分支替换master分支

    我有两个分支 master 和experiment 它们都是分开进化的 现在已经非常不同了 现在我准备将实验分支设为我的主分支 If I try git checkout master git merge experiment 我得到了很多
  • 设计表单以在 Windows CE 上使用不同的分辨率和宽高比

    我有一个在 Compact Framework 上运行的 NET 2 0 应用程序 它有一堆不同的形式 最初都是为了在具有特定屏幕分辨率的特定设备上运行而设计的 我现在希望让这个应用程序在具有非常不同的屏幕分辨率的其他一些设备上运行 有些设
  • 我如何在 C# 中实现 QueueDictionary(队列和字典的组合)?

    基本上 我想要的数据结构将镜像 MSMQ 但会在内存中 因为它正在一个进程中使用 通过镜像 MSMQ 我的意思是您会将对象排队 然后您可以将对象出队或使用密钥检索它们 这是我的初步尝试 我这次尝试的主要问题是 通过 id 获取会被频繁使用
  • 使用 Puppeteer for Node.js 自动允许网络摄像头访问

    我正在设置一个涉及启动网络摄像头视频会话的测试 到目前为止 一切工作正常 除了授予对网络摄像头的访问权限之外 不需要任何用户交互 当我使用的第三方库进行调用时 navigator mediaDevices getUserMedia audi
  • Wordpress - Woocommerce 删除“已添加到购物车”消息

    我希望在将商品添加到购物车后删除 产品已成功添加到购物车 的措辞和区域 我只想什么都没有 没有消息 也没有空间容纳消息 这是网站 http www tinytreasurehunts com代码位于 woocommerce function
  • iTextSharp 表格单元格间距可能吗?

    iTextSharp 中的表格 PdfPTable 中是否可以有单元格间距 我看不出有什么可能 我确实看到了一项使用 iTextSharp text Table 的建议 但这在我的 iTextSharp 版本 5 2 1 上似乎不可用 如果
  • 不同模块中的类名相同

    我需要在 swift 5 中使用两个同名的类 为此 我在两个不同的模块中创建了这两个类 但我对如何在UIViewController 我的一堂课是Person这是在models gt student模块和另一个类是Person与 是在mod
  • C中字节和字符的区别

    我想知道为什么我不能从书中编译一个例子 我在这里简化了示例 以避免发布受版权保护的书籍中的示例 include
  • QueryExpression 与 FetchXml CRM2011

    我们发现 Linq for CRM 2011 严重损坏 它似乎在没有对其进行任何 QA 的情况下就进入了 指示提供程序损坏程度的指标是像 Where x gt x b 这样的查询有效 但是这个 Where x gt b x 可能不依赖于某些
  • 如何从 MS Word 访问表格中具有不同单元格宽度的列

    我正在尝试从表格的第一列获取单元格 在 中获取异常Foreach Cells c in rng Tables 1 Columns 1 Cells 因为该表包含具有混合单元格宽度的列 例如 第一行有 4 个单元格 第二行只有 2 个单元格 2
  • 后台工作者访问 UI 的正确方法

    我不确定我是否正确执行此操作 但我正在使用以下代码 单击button1 执行 DoWork 问题是这样的 我如何调用 UI 来获取 textbox1 和 textbox2 的值 因为它们位于不同的线程上 所以无法调用它们 我应该使用调度程序
  • 如何让 setw 适用于以下所有标准输出?

    应该是一个微不足道的问题 但发现 setw 仅适用于其紧随其后的输出 并且不确定如何允许它适用于所有后续输出 例如 对于以下代码行 cout lt
  • 如何使用 NodeJS 替换 PDF 文件中的字符串?

    我有一个模板 PDF 文件 我想替换一些标记字符串以生成新的 PDF 文件并保存它们 最好 最简单的方法是什么 我不需要添加图形或任何花哨的东西 只是简单的文本替换 所以我不想要任何太复杂的东西 Thanks 编辑 刚刚发现HummusJS
  • AES 256 加密 - Java 的 Qt 等效项

    我已经实现了 AES 256 加密方法 并且在 Java 中运行良好 如下所示 private static final byte IV 0 2 4 8 16 32 64 127 127 64 32 16 8 4 2 0 actual en