我已經設法通過rsa共享隨機對稱密鑰。 但是我無法使用aes加密工作。 問題似乎是cryptoJS使用的鹽和初始化向量。CryptoJS.AES和Golang
首先,它的輸出線沿線的:
U2FsdGVkX19wbzVqqOr6U5dnuG34WyH+n1A4PX9Z+xBhY3bALGS7DOa/aphgnubc
谷歌搜索的reoccuring「U2FsdGVkX」或「cryptoJS.AES輸出」可悲的是就是沒有用的。
另一方面,golang的aes只需要一個32位密鑰和每個32位長度的輸入。 這意味着我必須以某種方式將上面的代碼拆分成相應的塊,並找出如何從祕密密鑰和上面的數據(可能包含salt + init向量)中創建32位密鑰。
不幸的是既不http://code.google.com/p/crypto-js也沒有任何谷歌搜索提供了一個解決方案。
順便說一句 - 我的加密現在:
var arr = new Array(32);
symetricKey = "";
var symHex = "";
rng.nextBytes(arr);
for(var i = 0; i < arr.length; i++){
symetricKey += String.fromCharCode(arr[i]);
//symHex= arr[i].toString(16), added a 0 if needed (so length always increases by 2)
}
//submit symetric via rsa. This is working, the server gets that key
var enc = CryptoJS.AES.encrypt(unencrypted, symetricKey)
//submit enc, stuck now - what to do with it on the server?
編輯:中的Base64響應後:
感謝您對base64輸入。
但是我仍然沒有設法使它起作用。
特別是因爲編碼的字符串以「SALTED」開頭,所以我認爲可能存在問題。
辦法,我現在嘗試編碼:
通過編碼上的客戶端:
var unencrypted = "{mail:test,password:test}"
var enc = CryptoJS.AES.encrypt(unencrypted, symKey)
在服務器中,變量ENC和symKey是相同的客戶端上:
baseReader := base64.NewDecoder(base64.StdEncoding, strings.NewReader(enc))
encData, err := ioutil.ReadAll(baseReader)
//if err != nil { ....}, doesn't happen here
cipher, err := aes.NewCipher(symKey)
//if err != nil { ....}, doesn't happen here
byteData := make([]byte, len(encData))
cipher.Decrypt(byteData, encData)
fmt.Println("Dec: ", string(byteData))
//Outputs unrepresentable characters
任何想法?
我發誓我越來越絕望。 Plain:「Test Message」,SymKey:\t「7a27aae91016ac602fe09f0eb0223c91」,cipher:\t 22d7f22417a477ad11cd2bb4ec158f61,IV:6a9497796914c5bd835d9b5264934ad0,Decode:4N ?? k?\ 0 ???&1?K?W?N ?? 請注意,symkey是一個字符串,在這裏不是hex。 我試着把密碼+ iv當作字符串以及十六進制來處理,無濟於事。 – user1977711
缺少的是以下內容:您必須symetricKey = CryptoJS.enc.Hex.parse(symetricKeyHex);併發送enc.ciphertext.toString()。substr(0,64);不管剩下的字節是什麼,我不知道,我找不到IV。 – user1977711