Encrypting the data via crypto classes in apex language is fun and below are the few articles links on developer force that really help us understand better.
http://wiki.developerforce.com/page/Apex_Crypto_Class
http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_classes_restful_crypto.htm
Having read the above document one can easily be of opinion thats its too easy with few lines of code to encrypt data using AES 256 and also same can be stored in a field via an apex trigger .It is not so simple when it comes to storing this data into the custom field .
From the above code ,the problem arises when we start thinking on how to store the encrypted blob data into the field of object .We dont have any field of data type blob in sfdc and thats were my problem began and hence this blog for people looking for solution around how to store the blog in a Long Text Field and then how to decrypt the same .
The above code will trigger an exception as below
The above code compiles and now lets decrypt and retrieve the original data
The below diagram summarizes the process
Reference:
https://help.salesforce.com/apex/HTViewSolution?urlname=How-do-you-convert-a-Blob-to-string-1327108626373&language=en_US
http://wiki.developerforce.com/page/Apex_Crypto_Class
http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_classes_restful_crypto.htm
Having read the above document one can easily be of opinion thats its too easy with few lines of code to encrypt data using AES 256 and also same can be stored in a field via an apex trigger .It is not so simple when it comes to storing this data into the custom field .
From the above code ,the problem arises when we start thinking on how to store the encrypted blob data into the field of object .We dont have any field of data type blob in sfdc and thats were my problem began and hence this blog for people looking for solution around how to store the blog in a Long Text Field and then how to decrypt the same .
The above code will trigger an exception as below
System.StringException: BLOB is not a valid UTF-8 string: AnonymousBlock: line 4, column 1
|
So now the question ,how will i be able to store the encrypted data in string format from the BLOB ?
There are couple of ways to do this ,but shortest ,the best
1)Convert BLOB data to HEX and store in field and then convert HEX back to string.There is lack of methods to do this till date but comming spring 14 release has a new method and much needed for these kind of problem.Once my org will be up with spring 14 i will try this method
Blob blobValue = EncodingUtil.convertFromHex('4A4B4C');
System.assertEquals('JKL', blobValue.toString());
Intresting but its coming in next release
2)Store the data inform of base64Encoded String and later use this and decode and then decrypt
The below diagram summarizes the process
Reference:
https://help.salesforce.com/apex/HTViewSolution?urlname=How-do-you-convert-a-Blob-to-string-1327108626373&language=en_US
No comments:
Post a Comment