Расшифровка - от Java до Powershell - PullRequest
0 голосов
/ 14 июля 2020

Я унаследовал самодельное решение для сертификации на базе Java и сервера Microsoft SQL. Мы продвигаемся к решению Venafi. Старый сертификат необходимо перенести из старого решения в решение Venafi pki. Разработчика старого решения здесь больше нет, но у меня есть часть дешифрования в Java, включая ключ дешифрования. У меня нет абсолютно никакого опыта работы с Java, и очень ограниченный опыт криптографии c в Powershell.

Код Java для расшифровки:

SecretKeySpec key = new SecretKeySpec(Base64.decode(encryptionkey.getBytes()), "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] original = cipher.doFinal(encrypted);

Пароль - это что-то например: gTsLrRTFR5Q0cvQZFRuZPw == (Не фактический пароль), а сертификаты в зашифрованном формате - это базовые c шестнадцатеричные данные, такие как 0x5F4E23E1 ... все в размере 1024.

Как мне расшифровать эти сертификаты в PowerShell?

1 Ответ

0 голосов
/ 15 июля 2020

Я не специалист по PowerShell, поэтому могу просто дать вам несколько советов по запуску части дешифрования для таких задач, как «получить все файлы в папке с окончанием * .en c». Я оставляю это вам чтобы найти решение.

Предполагая, что у вас есть ключ в формате

MTIzNDU2Nzg5MDEyMzQ1Ng==

, тогда это ключ с кодировкой Base64. Если все ваши 30 000 сертификатов были зашифрованы одним и тем же ключом, просто получите шестнадцатеричное значение ключа, используя онлайн-сервис, например https://base64.guru/converter/decode/hex.

Просто введите строку выше и нажмите преобразуйте Base64 в шестнадцатеричный, и вы получите следующий ключ:

31323334353637383930313233343536

Теперь посчитайте символы - здесь у нас есть 32 символа, что означает, что это 16-байтовый (128-битный) длинный ключ, используемый для криптографии AES. Подсчитать их - не шутка, потому что длина ключа важна для задачи дешифрования.

Наличие файла сертификата, зашифрованного с помощью шестнадцатеричного ключа длиной 32 символа ("cert32.en c ") вы используете openssl (может использоваться в PowerShell, а также во многих других языках сценариев) с этой командой ( важно использовать параметр -K с большой буквы K и шестнадцатеричную строку, заключенную в кавычки):

openssl enc -aes-128-ecb -d -in cert32.enc -out cert.pem -K "31323334353637383930313233343536"

Это расшифрует исходный сертификат для файла «cert.pem» следующим образом (это образец сертификата!):

-----BEGIN CERTIFICATE-----
MIIEETCCAvmgAwIBAgIUP2GufsPxg8R2n6L161b6wauxnGYwDQYJKoZIhvcNAQEL
BQAwgZcxCzAJBgNVBAYTAkRFMRIwEAYDVQQIDAlzb21lU3RhdGUxDTALBgNVBAcM
BGNpdHkxEDAOBgNVBAoMB2NvbXBhbnkxEDAOBgNVBAsMB3NlY3Rpb24xHzAdBgNV
BAMMFmphdmFjcnlwdG9AYnBsYWNlZC5uZXQxIDAeBgkqhkiG9w0BCQEWEWphdmFj
cnlwdG9AZ214LmRlMB4XDTIwMDcxMTA4MDMxNloXDTIxMDcxMTA4MDMxNlowgZcx
CzAJBgNVBAYTAkRFMRIwEAYDVQQIDAlzb21lU3RhdGUxDTALBgNVBAcMBGNpdHkx
EDAOBgNVBAoMB2NvbXBhbnkxEDAOBgNVBAsMB3NlY3Rpb24xHzAdBgNVBAMMFmph
dmFjcnlwdG9AYnBsYWNlZC5uZXQxIDAeBgkqhkiG9w0BCQEWEWphdmFjcnlwdG9A
Z214LmRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv1fayJg6TO7D
NASipOooJu9aYxLfw5/jokbaggOkL7wPQ2+eWk3tby72jMFniWySm6YIkiTbewYo
8WKl94zWTT8xx5pg/eOh28BTQLsi0/s9RF37z+eJA1TjA6TuBesNevm3V310H93Y
BLTA2Mjp/99W/smBhefaeYEkLh6TrZAAi2JtUHrs0FwNREoXrRIfq9monpUpY7lr
YRSy70nEaEyctw6khxeTRVRR97ZdqogLl2oEur9k5NKD8XHJ6A7MYz+asLMYNcnA
0jV02wR+b6etEr1tAtnswdxQ5T6tLrAnoen5v/fXSDnz93L7oRmTPsQJhK55TrrM
G+RWvV8aoQIDAQABo1MwUTAdBgNVHQ4EFgQULdU7CowdOtePac360y4n9aEbP2ow
HwYDVR0jBBgwFoAULdU7CowdOtePac360y4n9aEbP2owDwYDVR0TAQH/BAUwAwEB
/zANBgkqhkiG9w0BAQsFAAOCAQEAcP6EBsscMFAg0mMTLnd7+7VJzLuodPBAxiMS
zCYtUNS0KPBBR6OrGbHTbbvYd8/VGORpaWORfm0MDLP2kIxLKCYn4l7Wwoou7Idc
+Z+mohQKPwjtHnMZX6HyiCpmDF+qNR7dpOKpIsMahm9zVD8rfySFzr5oDSa7zFSr
MyJKmnz5I+gkUjJKvjYpKPjv7yuENhCbj4roNYK7ztN/vU6yJnFmzOaomP4MxhlE
GDoucjmy+qdGWF/i3Kh8n7zXBxRoBJZSkGqPE2N0PLIJlAFxb9c2QjPu5rmtZiDO
HiFj2Xk7jayMNw3JNVcayHjAcdHkp/u/BgTeqJWZRC+GsMz7ag==
-----END CERTIFICATE-----

Теперь мы работают с другой длиной ключа (64 символа). Имея base64, который выглядит как

MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI=

, вы получите шестнадцатеричную строку из 64 символов:

3132333435363738393031323334353637383930313233343536373839303132

Теперь мы запускаем командную строку openssl с аналогичным алгоритмом (и другим имя файла / ключ):

openssl enc -aes-256-ecb -d -in cert64.enc -out cert.pem -K "3132333435363738393031323334353637383930313233343536373839303132"

Вуаля, он декодирует тот же cert.pem, что и выше.

Все файлы доступны через мой репозиторий GitHub для легкого тестирования:

https://github.com/java-crypto/Stackoverflow/tree/master/Decoding_from_Java_to_Powershell

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...