我目前正在嘗試使用谷歌應用腳本進行AES加密,我發現了cCryptoGS。
感覺很奇怪,因為好像所有被加密的文本都以U2FsdGVkX1開頭(即使我把例子中的這是我的口令部分改為其他非常非常不同的東西)。我不確定我是否記錯了,我過去曾經嘗試過AES,但在Nodejs上,它看起來是如此的不同,我將得到完全不同的文本密碼,即使我只改變了我的資訊或我的密鑰中的一個字符。
。uj5u.com熱心網友回復:
CryptoJS可以處理口令和密鑰,用于加密和解密。字串被解釋為口令,WordArrays作為密鑰,s. 密碼輸入.
cCryptoGS封裝了口令變體,支持AES、DES、TripleDES和Rabbit演算法,見使用方法.
例如,對于AES,cCryptoGS/CryptoJS使用AES-256進行加密,除了明文之外,還必須傳遞一個密碼口令。
在加密之前,會生成一個隨機的8位元組的鹽,并通過OpenSSL的密鑰衍生功能EVP_BytesToKey(),從口令和鹽中匯出一個32位元組的密鑰和16位元組的IV。
為了與OpenSSL兼容,結果以OpenSSL格式生成,其中包括Salted__的ASCII編碼,然后是8位元組的鹽和實際的密碼文本,整個運算式以Base64編碼。
Salted__的Base64編碼是U2FsdGVkX18=,其中U2FsdGVkX1是固定的(最后兩個字符取決于鹽的第一位元組,因此可以改變)。因此,任何加密都是從U2FsdGVkX1開始的,但這并不透露任何資訊。
所以,是的,它是用AES-256加密的,常數前綴U2FsdGVkX1并不關鍵。
然而,密鑰推導函式EVP_BytesToKey()如今被認為是不安全的,尤其是cCryptoGS/CryptoJS使用的引數(破碎的MD5摘要和迭代次數為1),例如這里,第三部分,所以實際上不能推薦使用它(也許除了兼容性)。
cCryptoGS也直接允許使用CryptoJS函式,見CryptoJS direct,其安全性需要單獨評估。
安全的方法是直接傳遞密鑰和IV,或者當使用口令時不要應用內置函式EVP_BytesToKey(),而是應用可靠的密鑰推導函式如PBKDF2。
這些變體被CryptoJS支持,但顯然不被cCryptoGS支持,至少不被包裹的功能支持。
還要注意的是,至少鏈接的 cCryptoGS 源似乎是基于 CryptoJS 3.1.2 版本,該版本是 2013 年的,s. cCryptoGS 源(當前 CryptoJS 版本是 4.1.1)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/319357.html
標籤:
上一篇:如何將"如果資料陣列中的第三個元素不是空白,則顯示表格;如果不是,則回傳空白"翻譯成GoogleAppsScriptJavascript?


