javascript - 为什么这个密文总是以相同的字符开头?

标签 javascript angularjs cryptography cryptojs

我开始玩弄 CryptoJS,我注意到一些奇怪的事情:密文总是以相同的字符串开头。这是执行加密的代码(我知道 Math.random 在加密上并不安全,这只是一些快速而肮脏的东西)。

function Controller($scope) {
    $scope.Text = "";
    $scope.CipherText = "";
    $scope.Key = Math.random().toString();

    $scope.Encrypt = function ($event) {
        $scope.CipherText = CryptoJS.AES.encrypt($scope.Text, $scope.Key).toString();
    }
}

使用 HTML:

<div ng-controller="Controller">
    <div>Your key is: "{{Key}}".</div>
    <div>
        <textarea ng-change="Encrypt()" ng-model="Text" maxlength="140">{{Text}}</textarea>
        <br />
        <span>{{Text.length}} of 140</span>
    </div>
    <div>
        <textarea ng-model="CipherText" maxlength="216">{{CipherText}}</textarea>
        <br />
        <span>{{CipherText.length}} of 216</span>
    </div>
</div>

经过几次运行后,我注意到 Base64 密文总是以相同的几个字符开头。对于 key 0.5640227501280606:

a: U2FsdGVkX19kMKXVbnJHKbEkrwctAm2YbOTnPmtGRCg=
b: U2FsdGVkX18+0sG2DQzVgHwxH2cvrSqaDIxOOkUt5YU=
c: U2FsdGVkX19xGQdT6OUhbyyg1zfgqpGnWvF5Ibqkuqc=

我已经尝试过使用不同的 key 和不同长度的明文。密文始终以 U2FsdGVkX1 开头。这里发生了什么? CryptoJS 在这里存储一些内部信息吗?或者在某些情况下这对 AES 来说是正常的吗?

最佳答案

似乎正在解码字符串

U2FsdGVkX19

解码为

Salted_

FIDDLE

所以它只是 CryptoJS 作为盐添加的字符串

关于javascript - 为什么这个密文总是以相同的字符开头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23205167/

相关文章:

javascript - 如何扩展谷歌分析以跟踪 AJAX 等(根据 H5BP 文档)

javascript - 如何在当前日期上添加一天

javascript - 数据未绑定(bind)在 View 中

c - Microsoft Crypto API 禁止使用 RSAES-OAEP key 传输算法

DES加密/解密中的C#编码

Java MessageDigest 与 iOS CCHmac-sha256

javascript - 如何禁用和重新启用隐藏/可见元素的 tabindex?

php - 获取表单数据并将其发送到浏览器中的新选项卡

javascript - 在 y 轴上添加点 HIGHCHARTS

javascript - 如何在子指令之前执行父指令?