crypto.js“密文”是什么意思

时间:2018-10-18 04:57:52

标签: javascript cryptojs

我正在阅读这篇有关crypto.js的文章。

https://hibara.org/blog/2016/02/15/cryptojs/

' '

但是我遇到一个错误。

  

找不到名称“密文”。

  

TS1005:“;”预期的。

什么是密文? 有人知道解决这个问题的方法吗?


非常感谢您的回答。

但是它不能正常工作。

我认为console.log(已解密)应该是“ ABCDE”,但是我得到了WordArray对象。

你知道为什么吗?


// Fetch Recent Messages
func fetchRecentMsgs() {
    // Direct to database child
    Database.database().reference().child("recent-msgs").child(uid!).observe(.childAdded) { (snapshot: DataSnapshot) in
        if let dict = snapshot.value as? NSDictionary {
            print(dict)
            print(dict.allKeys)
            let keys = dict.allKeys
            for key in keys {
                print(key)
                if let nestedDict = dict[key] as? [String: Any] {
                    print(nestedDict)
                    let firstnameData = nestedDict["firstname"] as! String
                    let idData = nestedDict["id"] as! String
                    let lastnameData = nestedDict["lastname"] as! String
                    let messageData = nestedDict["message"] as! String
                    let usernameData = nestedDict["username"] as! String

我更改了代码。

我认为解密后的内部将是“ ABCDE”,但其中内部有WordArray对象。

我想再次返回ABCDE,你知道怎么做吗?

1 个答案:

答案 0 :(得分:1)

密文是指加密的文本。

对于您得到的错误:代码(以及您从中复制代码的文章)中存在编码错误。

此行:

var decrypted = CryptoJS.AES.decrypt({"ciphertext":encrypted_data}, key128Bits500Iterations, options);

应该是:

var decrypted = CryptoJS.AES.decrypt({"ciphertext":encrypted_data}, key128Bits500Iterations, options);

甚至只是:

var decrypted = CryptoJS.AES.decrypt({ciphertext:encrypted_data}, key128Bits500Iterations, options);

文章链接到的JSFiddle具有正确的代码。


完整代码段:

const crypto = CryptoJS;
const text = "ABCDE"
const password = "pass"

var secret_passphrase = crypto.enc.Utf8.parse(password);
var salt = crypto.lib.WordArray.random(128 / 8);
var key128Bits500Iterations = crypto.PBKDF2(secret_passphrase, salt, {keySize: 128 / 8, iterations: 500 });
var iv = crypto.lib.WordArray.random(128 / 8);
var options = {iv: iv, mode: crypto.mode.CBC, padding: crypto.pad.Pkcs7};
var message_text = crypto.enc.Utf8.parse(text);
var encrypted = crypto.AES.encrypt(message_text, key128Bits500Iterations, options);
var binary_data = crypto.enc.Hex.stringify(salt);
binary_data += (',' + crypto.enc.Hex.stringify(iv));
binary_data += (',' + encrypted);

console.log(binary_data);

var array_rawData = binary_data.split(',');
var salt = crypto.enc.Hex.parse(array_rawData[0]);
var iv = crypto.enc.Hex.parse(array_rawData[1]);
var encrypted_data = crypto.enc.Base64.parse(array_rawData[2]);
var secret_passphrase = crypto.enc.Utf8.parse(password);
var key128Bits500Iterations = crypto.PBKDF2(secret_passphrase, salt, {keySize: 128 / 8, iterations: 500 });
var options = {iv: iv, mode: crypto.mode.CBC, padding: crypto.pad.Pkcs7};
var decrypted = crypto.AES.decrypt({ciphertext:encrypted_data}, key128Bits500Iterations, options);

console.log(decrypted.toString(CryptoJS.enc.Utf8));
  <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/pbkdf2.js"></script>