인코딩 인코딩은 주어진 입력을 변환하는 것을 의미한다. 예를 들어 문자열을 반대로 하는 x라는 함수가 있다면 함수 x -> y는 ABCD를 DCBA로 변환한다. 암호화 암호화는 출력을 얻기 위해 입력 값과 키를 모두 제공하는 인코딩의 특별한 유형이다. 키를 통해 누가 출력에서 입력을 얻을 수 있는지 선택할 수 있다. 암호화를 함수로 표현하는 가장 간단한 형식은 다음과 같다. (x, k) -> y 여기에서 x는 입력이고 k는 키를 y는 암호화된 결과를 의미한다. 이러한 방식으로 키가 알려진 함수를 통해 출력에서 (y, k) ->x에서 입력을 얻을 수 있다. 이렇게 역으로 메시지를 얻는 것을 복호화라고 한다. 암호화에서 사용된 키가 복호화에 사용된 키와 동일하다면 일반적으로 대칭키라고 한다. 암호화 ((x, k1) -> y)와 복호화((y, k2) -> x)와 같이 두 개의 다른 키가 사용되는 경우 비대칭 암호화가 수행되었다고 한다. (k1, k2)를 키쌍이라고 한다. 암호화에 사용되는 k1을 공개키라고 하며 k2를 개인키라고 한다. 개인 키 소유자만 데이터를 복호화 할 수 있다. 해싱 해싱은 함수가 단방향인 점을 제외하면 인코딩의 특별한 유형이라고 할 수 있다. 즉 해시 함수의 출력 y에서 입력 x를 반환할 수 없다. 하지만 출력 y가 입력 x에 해당하지는 확인하는 방법이 있기 때문에 해싱을 인코딩 및 매칭을 위한 함수 쌍으로 볼 수 있다. 해싱이 x->y이면 일치하는 함수 (x,y) -> boolean이다. 때로 해싱 함수 (x, k) -> y 입력에 임의의 값을 사용할 수 있다. 이 값을 솔트(Salt)라고 한다. 솔트는 해싱 함수를 보다 강력하게 만들어 출력을 통해 입력을 얻기 힘들게 만든다.