<주의>
하기 내용은 스토리의 스포는 없지만 게임 플레이 방식의 스포는 포함되어있습니다
감상에 주의하시기 바랍니다.
<주의>

7 days to end with you라는 재미있는 게임을 플레이해보았다 (구매링크)
그런데 완전 처음 해본 건 아니고 이전에 유투브로 봤던 경험이 있어서 대강 적인 정보는 알았다
저 문자들이 알파벳과 대응된다는점!
그정도만 알고 플레이하는데 동일한 알파벳으로 다른 단어를 조합해봐도 몇개는 일치하고 몇개는 아예 다른 알파벳인것..
아예 나무위키를 보고 해독 방법을 파악해보니 시저 알고리즘이라는 것을 이용했다고 한다

이런 식으로 알파벳 순서는 동일한데 특정 해쉬값에 따라서 몇칸씩 이동되어있는 것!
그런데 그 해쉬값이 항상 동일한게 아니라
단어의 알파벳 조합에 따라 다양하게 변한다
a부터 z를 0부터 25로 뒀을때
각 알파벳에 대응되는 숫자를 합하고
그 합을 26으로 나눈 나머지값이 해쉬로 쓰이는 그런 형태..
그래서 직접 코딩을 해봤다!
const word = [2,19,22,8]
const answer = []
const answer2 = []
const origin = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','z','y']
// 0도 값이 있는데, 차로 하면 그냥 0을 제외하고해버리기때문?
for(let i=0; i<26; i++){
let str = ''
let str2 = ''
for(let j=0; j<word.length; j++){
str += String.fromCharCode((word[j]+i)%26+97)
str2 += String.fromCharCode((word[j]+i)%25+97)
}
answer.push(str)
answer2.push(str2)
}
console.log(answer.join(', '))
console.log('===or===')
console.log(answer2.join(', '))
이걸 돌린 화면은 밑에 캡쳐

이렇게 오른쪽에 추측되는 단어들이 나열되고
여기에서 합당하다고 보이는 단어를 게임 단어에 대응했다 ㅎㅎ
(참고로 코드에서 word에 넣게되는 숫자는 비밀문을 여는 자물쇠에 나와있는 저쪽알파벳을 토대로 0부터 25까지 숫자 맥인 것을 기입한 것임)
그래서 하나하나 찾아보다보면

이렇게 웬만한 단어는 다 채울수있다!
그런데 정말 미스테리 했던 것이
그 단순한 알고리즘으로 모두 해결되지않는것..
이상하게 특정 알파벳들이 한칸씩 뒤로 밀려서 단어를 찾아내기가 어려웠다
알고보니 해당 게임에서 오리지날 시저 알고리즘을 대입한게 아니라
살짝 변형을 준 것
그걸 어떻게 알게되었냐면 실제 해독기로 알려진 사이트의 사족에서 찾아냈다

실제 시저 암호와 약간의 다른점이 있다는 것!
이거 아니었으면 내가 어느부분에서 코딩을 잘못한건지 밤새워 찾았을 것같다..
저 사이트의 코딩을 보면 26이 아니라 25를 이용해서 변형된 부분이 있었다

나도 실제로 제대로된 단어가 나오지않아 26이 잘못됐나 해서 25로 시도해봤었고
다행이 정답이었던 듯 하다
(내 코드의 str은 26, str1는 25를 대상으로 한 것)
어쨋든 그래서 너무 재미있었다
그뒤로 갑자기 추리게임에 빠져서 닥치는대로 해봤는데
이만한 흥미를 불러일으키는 게임은 없었음..
직접 코딩까지하게하는 갓겜!!
'기술 > 기타 정보' 카테고리의 다른 글
| 블로그 업로드를 위해 개인정보 삭제 (1) (0) | 2023.03.22 |
|---|