Friday, June 19, 2015

AES Encryption and Decryption with Oracle Database

Сайн байцгаана уу?

Удаан хугацаанд бичсэнгүй, өнгөрсөн хугацаанд судалсан зүйлүүдээсээ хуваалцаж эхлье. Өнөөдрийн хувьд Oracle мэдээллийн сан дээр AES - аар хэрхэн мэдээллээ нууцлах болон сэргээх талаар орууллаа.

Магадгүй нууцлах шаардлагатай мэдээлэлтэй хүмүүс байвал санаа авч болохын.

Хамгийн эхлэн тухайн хэрэглэгчдээ crypto эрхийг оноож өгөх шаардлагатай.

 grant execute on dbms_crypto to YOUR_USER;  

Үүний дараа шифрлэх болон сэргээх хоёр процедурыг мэдээллийн сандаа нэмэж өгсөнөөр бэлэн боллоо гэсэн үг.

 create or replace FUNCTION sec_return_encrypted_data(data IN VARCHAR) RETURN RAW IS  
   key VARCHAR(16) := 'A1B2C3D4E5F6G7H8';  
   encryption_mode NUMBER := DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5;  
   BEGIN        
      RETURN DBMS_CRYPTO.ENCRYPT(UTL_I18N.STRING_TO_RAW (data, 'AL32UTF8'),   
       encryption_mode, UTL_I18N.STRING_TO_RAW(key, 'AL32UTF8') );  
   END;  

 create or replace FUNCTION sec_return_decrypted_data(data IN RAW) RETURN VARCHAR IS  
   key VARCHAR(16) := 'A1B2C3D4E5F6G7H8';  
   encryption_mode NUMBER := DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5;  
   BEGIN  
      RETURN UTL_RAW.CAST_TO_VARCHAR2(DBMS_CRYPTO.DECRYPT  
       (data, encryption_mode, UTL_I18N.STRING_TO_RAW(key, 'AL32UTF8')));  
   END;  

Анхаарах ёстой зүйл нь шифрлэсэн өгөгдөл нь RAW өгөгдлийн төрөлтэй байх ёстой. Мөн шифрлэх төрлийг тохируулахдаа дээр харуулсан аргачлалыг сонгосон ба өөр олон хослолыг хэрэглэж болох санагдсан. (DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC  + DBMS_CRYPTO.PAD_PKCS5).

AES алгоритм нь key шаардлагатай байдаг ба энийг хэрэгжүүлж байгаа хүн нь процедурлуугаа гаднаас дамжуулах, өөр газар хадгалах гээд олон аргаар шийдэж болох байх.

За тэгээд сайжруулалтыг хүн бүр өөрийнхөөрөө судлан нэмэх боломжтой санагдаж байна.

Хүндэтгэсэн,
Эрдэнэбаяр

Linkedin: http://www.linkedin.com/in/erdenebayare
Twitter: http://twitter.com/#!/erdenebayare