react-native - 使用 AES128-ECB 加密十六进制并在 javascript/node 中维护大端
问题描述
我正在尝试使用 Big Endian 协议使用 AES128-ECB 加密十六进制。
我知道 ECB 不安全,但我需要用它来连接蓝牙应用程序。
我正在构建一个将连接到蓝牙外围设备的 React-Native 应用程序。
我正在使用 aes-js npm 模块。
到目前为止,我的代码是:
const key = Buffer.from("20572F52364B3F473050415811632D2B", "hex")
const text = '0x060x010x010x01'
const textBytes = aesjs.utils.utf8.toBytes(text);
console.log('textBytes: ', textBytes)
const aesEcb = new aesjs.ModeOfOperation.ecb(key);
console.log('aesEcb: ', aesEcb)
const encryptedBytes = aesEcb.encrypt(textBytes);
console.log('encryptedBytes: ', encryptedBytes)
const encryptedHex = aesjs.utils.hex.fromBytes(encryptedBytes);
console.log('encryptedHex: ', encryptedHex);
我不认为这是在维护大端。
我很想请一些帮助。
解决方案
我正在尝试使用 Big Endian 协议使用 AES128-ECB 加密十六进制。
Big endian 是一种将数字映射到位/字节的方法。使用大端序时,最重要的部分在左侧(低索引),而使用小端序时,最重要的部分在右侧(高索引)。字节一般被看成是原子的,没有明确的顺序(一般最高位显示在左边,但是索引是从高到低而不是从低到高,所以是小端序,只是为了做事有趣的)。如果字符被编码为多字节数字,则它们仅具有分配给 的字节序。
但是 UTF-8 和 AES 有一个明确的字节顺序,不包括任何数字编码。因此,大端或小端不会发挥作用。AES 在内部可以对 32 位值进行操作,但是当输出定义明确时,这并不重要;AES 作为 AES 运行,这就是它的结束。仅当低级例程返回 32 或 16 位字而不是字节时才会出现问题。
CryptoJS 中的utf16
编解码器似乎使用 UTF-16BE(大端),并且 AES 在加密/解密后不会更改该顺序。请注意,我没有专门阅读此内容,但由于还有一个utf16le
我认为没有那么多其他选项。
推荐阅读
- azure - 如何从 api 范围将范围添加到 id 令牌
- reactjs - 即使 screen.debug() 显示文本存在,React 测试库也无法找到文本
- sylius - 无法通过引导主题结帐时的送货地址步骤
- xcode - 在 .sks 文件中复制和粘贴 SpriteNode 时阻止 Xcode 崩溃?
- kotlin - Kotlin - 收到警报后开始活动并单击确定
- javascript - 使用 React-Native 剪贴板获取 null 不是对象(评估 'u.default.setString')
- amazon-web-services - 尝试使用 SSL 将 Flask 应用程序部署到 AWS Beanstalk:没有可用的包 mod24_ssl
- c# - 如何追踪传递依赖的来源?
- android-styles - 如何在 AlertDialog 中更改项目文本的颜色
- stata - 如何替换具有相同前缀的多个变量的观察值?