당신은 암호화 된 텍스트를 검색 할 수 없습니다 - 먼저 그것을 암호화의 목적을 물리 칠 것이다. 문자열의 다른 부분이 전혀 다른 값으로 암호화된다는 것을 알게되었습니다. 이것은 의도적으로 설계되었거나 암호화가 훨씬 쉽게 될 수 있습니다.
당신은 무엇이든 do는 찾고자하는 텍스트의 해시 조각이며 다른 테이블 참조에 해시를 부모로 다시 저장합니다.
표 parent
(암호화 된 문자열)
id string
1 xyzxyzxyzxyzxyzxyz (encrypted 'hello my friend')
그런 다음 당신은 string
word
에 구성 요소를 분해합니다.
이 어레이 위에
var words = string.split(' '); // words is an array of ['hello', 'my', 'friend']
대하여 반복하고, "색인"테이블에 그 해시를 삽입 한 후 상기 words
각각의 해시를 계산한다.
표 words
당신이 어떤을 위해 parent_id
을 반환 한 후, 다른 단어로 검색 쿼리를 구성하는 자신의 해시를 계산하고, 할 수있을 것입니다이 시점에서
id parent_id hash
1 1 abc (hash of "hello")
2 1 def (hash of "my")
3 1 ghi (hash of "friend")
을 (인덱스 단어는 암호화 된 부모 해시) 성냥. 에 대해서만 개의 단어가 작동합니다. 모든 변형은 계산 된 해시를 변경하므로 모든 것을 강제로 소문자로 만들 수 있습니다.
"hello"를 검색한다고 가정하면 "abc"의 해시를 계산 한 다음 다음 SQL 쿼리를 실행합니다.
SELECT p.id, p.string
FROM parent p
JOIN words w ON p.id = w.parent_id
WHERE w.hash IN ('abc')
GROUP BY p.id