2013-10-10 3 views
0

주어진 String이 scrypt key와 일치하는지 조사해야합니다. 일치 할 필요scrypt와 일치하는 정규식

몇 가지 예 :

$s0$e0801$epIxT/h6HbbwHaehFnh/bw==$7H0vsXlY8UxxyW/BWx/9GuY7jEvGjT71GFd6O4SZND0= 
$s0$100808$6McCjsQBpcCShLWq4nl3gg==$gs+Tz5DLGCDtYHGpIkP4i3EDpufBzsEGvoXzegkO5cU= 

나는 Javas String.matches 기능을 사용합니다.

키의 설명과 같은 것이다 : 기본 형태 : $s0$params$salt$key 값은 방치 :

  • S0 - 키 유도 128 비트 염 및 256 비트를 가진 포맷의 버전 0
  • PARAMS -은 log2 (N) (16 비트), R (8 비트), 및 P (8 비트)
  • 염 함유 진수 정수 32 비트 - base64 인코딩 염
  • 키 - base64 인코딩 키 유도

답변

2

내가 생각할 수있는 최선의 방법입니다. 더 나은 대답은 크게 감사드립니다.

Java: 
String match = "^\\$s0\\$[0-9a-f]{5,6}\\$[a-zA-Z0-9/+]+[=]*\\$[a-zA-Z0-9/+]+[=]*$" 

General: 
^\$s0\$[0-9a-f]{5,6}\$[a-zA-Z0-9/+]+[=]*\$[a-zA-Z0-9/+]+[=]*$ 
+1

원하는 정확성에 따라 다릅니다. 소금과 열쇠의 길이가 알려지기 때문에 정확한 문자 수가 각각 존재하는지 확인할 수 있습니다. 또한, 스펙에서는 'params'에 최대 8자를 허용하지만 실제로는 가능하지 않습니다. {a-zA-Z0-9/+} {22} [a-zA-Z0-9/+ =] {2} \ $ [a-zA-Z0-9/+] {42} [a-zA-Z0-9/+ =] {2} $' – Rand

+0

@Rand 멋지 네요. –