암호화(Encrypt Class)¶
암호화 클래스는 데이터를 암호화하는 두 가지 방법을 제공합니다.본 클래스는 Mcrypt 라이브러리를 사용하여 암호화 하거나, 비트단위의 랜덤해쉬 XOR 인코딩방법(randomly hashed bitwise XOR encoding scheme)을 사용합니다.
Important
이 라이브러리는 DEPRECATED 되었습니다. 그리고 오직 이전 버전과의 호환성 때문에 유지됩니다. 새로운암호라이브러리(Encryption Library)를 사용해주세요.
암호화 라이브러리 사용하기 Using the Encrypt Library¶
키 설정 Setting your Key¶
키(key)란 암호화 과정을 컨트롤하고 암호화된 문자열을 다시 복호화 할 수 있도록 해주는 작은 정보조각입니다. 사실, 여러분이 선택한 키는 그 키를 사용하여 암호화한 데이터를 복호화할 수 있는 유일한 수단이 됩니다. 그러므로 신중히 선택하셔야함은 물론이고, 영속적인(변하지 않는) 데이터에 사용할 경우 키를 변경하지 않으셔아 합니다.
키를 잘 보호해야한다는 것은 말할 필요도 없겠죠 .누군가가 여러분의 키를 손에 넣을수 있다면, 암호화된 데이터는 쉽게 해석되어버릴테니까요. 만약 서버를 여러분이 완전히 통제할 수 있는 상황이 아니라면(호스팅을 받고있다든지), 키를 완전히 보호할 수 있다고 보장할 수 없습니다. 그러므로, 신용카드 정보라든지 하는 매우 중요한 정보의 암호화를 하기 전에 신중히 생각하셔야 합니다.
암호화 알고리즘의 장점을 최대한 활용하고자한다면 키는 영문기준으로 32글자(128비트)가 되어야하며 문자와 숫자, 대문자와 소문자가 섞인 랜덤 문자열로 하는 것이 좋습니다.키를 단순한 문자열로 만들지 마세요 . 가능한한 랜덤하게 만드셔야 합니다.
키는 application/config/config.php 파일에 저장 하거나 혹은 여러분 스스로 만든 저장 매커니즘을 사용하여 동적으로 암호/복호화할 때만 전달하도록 할 수 있습니다.
application/config/config.php 파일에 저장하려면 해당파일을 여신후 아래와 같이 설정하세요:
$config['encryption_key'] = "YOUR KEY";
메세지 길이 Message Length¶
인코딩 된 메시지는 원본 메세지에 비해서 약 2.6배정도 더 길어집니다. 예를 들어, “my super secret data” 라는 문자열은 21자인데 인코딩 되면 대략 55자가 됩니다.('대략'이라고 표현한 이유는 인코딩시 메세지의 길이는 원본에 정확히 선형적으로 비례하는 것이 아니라 64비트 클러스터(64 bit clusters)에 따라 증가하기 때문입니다. we say “roughly” because the encoded string length increments in 64 bit clusters, so it's not exactly linear). 데이터 저장 메커니즘을 선택할 때 이러한 사실을 염두에 두셔야 합니다. 예를 들어 쿠키의 경우 4K 까지의 정보만을 저장할 수 있으니까요.
클래스 초기화 Initializing the Class¶
다른 클래스들과 마찬가지로, 암호화 클래스도 컨트롤러 클래스에서 $this->load->library() 함수를 이용하여 초기화 합니다:
$this->load->library('encrypt');
일단 로드되면 암호화 라이브러리 객체는 아래와 같이 사용하실 수 있습니다:
$this->encrypt
클래스 레퍼런스 Class Reference¶
- class CI_Encrypt¶
- encode($string[, $key = ''])¶
인수: - $string (string) – Data to encrypt
- $key (string) – Encryption key
반환값: Encrypted string
반환형: 문자열
데이터 암호화를 수행하고 그 결과를 반환합니다. 예제:
$msg = 'My secret message'; $encrypted_string = $this->encrypt->encode($msg);
만약 config 파일에 정의해두신 키 대신 다른 키를 사용하고자 한다면 옵션으로 두 번째 파라미터를 통해 키를 전달할 수 있습니다:
$msg = 'My secret message'; $key = 'super-secret-key'; $encrypted_string = $this->encrypt->encode($msg, $key);
- decode($string[, $key = ''])¶
인수: - $string (string) – String to decrypt
- $key (string) – Encryption key
반환값: Plain-text string
반환형: 문자열
암호화 된 문자열을 복호화(해독)합니다. 예제:
$encrypted_string = 'APANtByIGI1BpVXZTJgcsAG8GZl8pdwwa84'; $plaintext_string = $this->encrypt->decode($encrypted_string);
설정파일에 있는 암호키대신 다른것을 사용하려면, 두 번째 파라미터로 넘기면 됩니다:
$msg = 'My secret message'; $key = 'super-secret-key'; $encrypted_string = $this->encrypt->decode($msg, $key);
- set_cipher($cipher)¶
인수: - $cipher (int) – Valid PHP MCrypt cypher constant
반환값: CI_Encrypt instance (method chaining)
반환형: CI_Encrypt
Mcrypt 해독자(cipher)를 설정할 수 있게 합니다. 기본으로 MCRYPT_RIJNDAEL_256 가 사용됩니다. 예제:
$this->encrypt->set_cipher(MCRYPT_BLOWFISH);
Php.net 을 방문하시면 가능한 해독자목록(available ciphers)을 확인하실 수 있습니다.
서버가 MCrypt 를 지원하는지 수동으로 테스트해보실 수 있습니다:
echo extension_loaded('mcrypt') ? 'Yup' : 'Nope';
- set_mode($mode)¶
인수: - $mode (int) – Valid PHP MCrypt mode constant
반환값: CI_Encrypt instance (method chaining)
반환형: CI_Encrypt
Mcrypt 모드를 설정합니다. 기본으로 MCRYPT_MODE_CBC가 사용됩니다. Example:
$this->encrypt->set_mode(MCRYPT_MODE_CFB);
Php.net 에서 사용 가능한 모드목록( available modes)을 확인하실 수 있습니다.
- encode_from_legacy($string[, $legacy_mode = MCRYPT_MODE_ECB[, $key = '']])¶
인수: - $string (string) – String to encrypt
- $legacy_mode (int) – Valid PHP MCrypt cipher constant
- $key (string) – Encryption key
반환값: Newly encrypted string
반환형: 문자열
CodeIgniter 1.x에서 암호화된 데이터를 CodeIgniter 2.x 암호화 클래스와 호환성을 갖도록 다시 인코딩 합니다. 파일이나 데이터베이스등에 인코딩된 데이터가 저장된경우, 서버에서 Mcrypt를 지원한다면 이 함수를 사용할 수 있습니다. 인코딩된 세션이나 임시 데이터등의 경우에 있어서는 개발자가 손댈 부분이 없습니다.하지만,2.x 이전 버전에서 인코딩 된 데이터는 디코딩 되지않기 때문에 세션은 제거됩니다.
Important
왜 구버전의 인코딩, 디코딩을 유지하지 않고 다시 인코딩하는 함수만 제공하는가? 암호화 클래스의 알고리즘은 CodeIgniter 2.x에서 성능과 안전성 모두 향상되었습니다. 그래서, 이전 방법을 사용하지 않는 것이 좋다고 생각했습니다. 암호화 라이브러리를 확장하여 이전 버전으로 동작하게 할 수 있겠지만, 신중하게 생각하시기 바랍니다.
$new_data = $this->encrypt->encode_from_legacy($old_encrypted_string);
Parameter Default Description $orig_data n/a CodeIgniter 1.x 암호화 클래스에서 암호화된 데이터 $legacy_mode MCRYPT_MODE_ECB 원래 데이터를 암호화하는 데 사용된 Mcrypt 모드. CodeIgniter 1.x의 기본값은 MCRYPT_MODE_ECB이었으며, 별도로 지정하지 않으면 이 값이 사용됩니다. $key n/a 암호화 키. 먼저 설명한 것처럼 일반적으로 설정 파일에 지정된 것.