我需要 Java Regex,它可以匹配用于设置 SSL/TLS 密码的参数
有效密码: (为了一次性测试多个模式,请将它们添加到以逗号分隔的字符串中,稍后迭代每个模式以进行模式匹配)
"ALL:!kRSA:!CBC,ALL:-aRSA:-CBC:SHA256,ALL:!kRSA,ALL:!aRSA,ALL:!RSA,ALL:!EDH-RSA-DES-CBC-SHA,ALL:!DES-CBC,ALL:!DES,ALL:-RSA+AES-128-CBC+SHA256";
可以与 regex = "^((?:ALL)|(?:ALL)(:([!-]?(a|k)?[A-Z0-9]+([ +-]?(a|k)?[A-Z0-9]+)?)*)*)$";
但是当我尝试无效的密码时:(基本上它应该无法匹配)
invalidciphers = "ALL:+DES,+DES,-DES,DEFAULT:-aRSA,akRSA,kDHE-aRSA,!ECDHE";
无法创建一个。
谁能帮帮我吗?
最佳答案
您可以使用
^ALL(?::[!-]?[ak]?[A-Z0-9]+(?:[+-]?[ak]?[A-Z0-9]+)*)*(?:,ALL(?::[!-]?[ak]?[A-Z0-9]+(?:[+-]?[ak]?[A-Z0-9]+)*)*)*$
请参阅regex demo
该方案是^<single_pattern>(?:,<single_pattern>)*$
。它匹配字符串的开头,然后是单个模式,然后是 0 次或多次出现的逗号,后跟单个模式,直到字符串末尾。
single_pattern
这是ALL(?::[!-]?[ak]?[A-Z0-9]+(?:[+-]?[ak]?[A-Z0-9]+)*)*
:
-
ALL
- 一个子字符串 -
(?::[!-]?[ak]?[A-Z0-9]+(?:[+-]?[ak]?[A-Z0-9]+)*)*
- 0次或多次出现-
:
- 冒号 -
[!-]?
- 可选!
或-
-
[ak]?
- 可选a
或k
-
[A-Z0-9]+
- 1+ 个大写字母或数字 -
(?:[+-]?[ak]?[A-Z0-9]+)*
- 0次或多次出现-
[+-]?
- 可选+
或-
-
[ak]?
- 可选a
或k
-
[A-Z0-9]+
- 1+ 个大写字母或数字
-
-
关于用于 TLS/SSL 密码套件强化的 Java 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41628749/