Расшифруйте внешние данные AES256 / CBC / PKCS7 с помощью CryptoJS, предоставив шестнадцатеричный ключ из 64 символов в SiteMinder - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь использовать CryptoJS для дешифрования строки, при условии, что строка из 64 символов SiteMinder предоставлена.

Расшифрованная строка выглядит так: 8yi6XwyLPZq%2FNjV9fmoyHYtC2UUS48KlpPLMl063gPwDDLJYkLeUFAwC8hTcXrPJkShbjJTShlLUoh2y17kwOA%3D%3D

И ключ предоставлен мнеявляется шестнадцатеричной строкой из 64 символов, например: B55E3CE5E4E335D61E3224B2EAAA79E68AFF43FFAAA85A9D4F2BA07618DF2D67

После того, как информация расшифрована, она должна представить строку, которая показывает что-то вроде: term1;term2

Код JavaScript, которым я являюсьиспользование для дешифрования с CryptoJS выглядит следующим образом: CryptoJS.AES.decrypt( encryptedValue, 64CharacterKeyProvidedAbove ).toString();

Однако расшифрованное значение не возвращается, как ожидалось.Я прочитал некоторую информацию о предоставлении IV для использования предопределенного ключа, но у меня нет никакой информации, только ключ, используемый, когда SiteMinder шифрует информацию из базы данных, к которой он подключен.

DoМне нужно изменить способ использования CryptoJS?

1 Ответ

0 голосов
/ 16 октября 2018

Предполагая, что вы имеете в виду зашифрованная строка выглядит как 8yi6XwyLPZq%2FNjV9fmoyHYtC2UUS48KlpPLMl063gPwDDLJYkLeUFAwC8hTcXrPJkShbjJTShlLUoh2y17kwOA%3D%3D.

И учитывая, что шифрование - это AES256 / CBC / PKCS7.

Мы можем сделать следующие наблюдения:

  • Строка выглядит в кодировке URL и в кодировке Base64 (% 3D - это =, а Base64 часто заканчивается =)
  • Не существует IV, который требуется для CBCтак что это, вероятно, в первых 16 байтах кодированной строки.Остальная часть строки - это, вероятно, зашифрованный текст

Так что мы можем расшифровать его с помощью CryptoJS следующим образом:

var encrypted = CryptoJS.enc.Base64.parse(decodeURIComponent(encryptedStr));
var key = CryptoJS.enc.Hex.parse(hexKey);
var iv = CryptoJS.enc.Hex.parse(CryptoJS.enc.Hex.stringify(encrypted).substr(0, 32));
var ciphertext = CryptoJS.enc.Hex.parse(CryptoJS.enc.Hex.stringify(encrypted).substr(32));
var plaintext = CryptoJS.AES.decrypt({ciphertext: ciphertext}, key, {iv: iv});    

Вот рабочая DEMO на jsFiddle.

Результат:

SERLOGINNAME=T6ATD1F;password=QWERTY!8;
...