1. A method of providing encryption and decryption of plaintext strings in a program file, comprising: at a first device having one or more processors and memory: marking each of a plurality of plaintext strings in a source file, the source file comprising source code, with a respective marking macro, wherein the plurality of plaintext strings remain visible in the source after being marked by the respective marking macros, and wherein the respective marking macros for one or more plaintext strings of the plurality of plaintext strings that are non-static variables further raise said one or more plaintext strings to one or more respective static constants in the source code; scanning for the respective marking macros to identify the plurality of plaintext strings in the source code; generating a respective ciphertext string for each of the plurality plaintext strings that have been identified; storing the plurality of ciphertext strings in a dictionary file, wherein each ciphertext string is indexed in the dictionary file by a respective hash value computed from the plaintext string corresponding to the ciphertext string, and wherein the respective hash value for each of the plaintext strings is used to retrieve the respective ciphertext string of the plaintext string from the dictionary during program execution; and compiling and linking the plurality of ciphertext strings and the source file that is marked by the respective marking macros to obtain an executable file, wherein the plurality of plaintext strings are not visible in the executable file, and wherein the plurality of ciphertext strings are decrypted and loaded into a pre-allocated buffer during loading of the executable file at a second device, distinct from the first device, during program execution.