我开始玩弄 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 来说是正常的吗?
最佳答案
关于javascript - 为什么这个密文总是以相同的字符开头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23205167/