Regex для проверки первого и последнего содержимого (зашифровано) - PullRequest
0 голосов
/ 28 января 2019

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

Starts and ends with 5 dashes.

-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----

Вот регулярное выражение, которое мы разработали, и оно работает нормально.

-----BEGIN\sPRIVATE\sKEY-----|-----END\sPRIVATE\sKEY-----

Теперь существует дополнительное требование для обнаруженияи исключить некоторые примеры.

Only detect

    -----BEGIN PRIVATE KEY-----  
    "Any one word other than ENCRYPTED"
    -----END PRIVATE KEY-----

Я хочу создать регулярное выражение для вышеуказанного требования, оно должно проверить начало файла -----BEGIN PRIVATE KEY----- и конец файла -----END PRIVATE KEY-----, а также содержимое, имеет ли оно encrypted слово

Пример:

/^(-----BEGIN\sRSA\sPRIVATE\sKEY-----).*((?!ENCRYPTED).)*.(-----END\sRSA\sPRIVATE\sKEY-----)$
^(?=^-----BEGIN\sRSA\sPRIVATE\sKEY-----)(?=.*-----END\sRSA\sPRIVATE\sKEY-----$)(?=^(?:!ENCRYPTED).)*$.*$

Приведенный выше пример не работает, но мне нужно создать такой, как этот ... Пожалуйста, помогите.

пример ключа для справки

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,C7F9E43D16E5CF55
C7F9E43D16E5CF55

y4Qk6+2MQuxjZbglAwNEEpNF9hMsr3YNltnP+T3x5oMlw2JaKGYePadDWEAYwXd4
Fk3zYR35Tsz1isLZQzvZd6O5THlx5eyflZBbYGE5fS40VucgiX37tM5D2OsjH3WG
HZBx5Mh4PkGSyoOl7Q5o1SHkeNl4Xkipo9AWRzPzLg4w9HTlqKRltxEKaDbnLaUH
3yGX1rVKkppKUi88vwg6MJ7ATwy8VNhialMmBO4pQVLLBZhH3KU22r4hpCKKq0GR
nZVWA3bJm7hMXALMS8oj+Ljup+ysG3qrvrNSS3H3t2OTrmNsG749M+LDFy7qjZTw

-----END RSA PRIVATE KEY-----

1 Ответ

0 голосов
/ 30 января 2019

У вашего регулярного выражения ^(-----BEGIN\sRSA\sPRIVATE\sKEY-----).*((?!ENCRYPTED).)*.(-----END\sRSA\sPRIVATE\sKEY-----)$ есть несколько проблем.

  • Вам необходимо включить режим DOTALL, поскольку ваши данные распределены по нескольким строкам с использованием (?s) или с помощью флажка на вашем языке.
  • Вторая проблема заключается в том, что вы используете .* до ((?!ENCRYPTED).), вследствие чего он потребляет любой символ, включая текст ENCRYPTED, а остальная часть регулярного выражения делает его успешным совпадением, сопоставляя оставшуюся часть регулярного выражения с текстом.,Так что просто удалите .* в своем регулярном выражении.
  • . после ((?!ENCRYPTED).)* не требуется, поэтому просто удалите это также
  • Кроме того, если вы просто хотите соответствовать и ненеобходимо получить доступ к группам, сделать их незафиксированными, добавив ?: сразу после запуска (

В целом ваше регулярное выражение становится,

(?s)^(?:-----BEGIN\sRSA\sPRIVATE\sKEY-----)((?!ENCRYPTED).)*(?:-----END\sRSA\sPRIVATE\sKEY-----)$

Вот демоверсия

Надеюсь, что это решит вашу проблему, и дайте мне знать, если у вас есть какие-либо вопросы.

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