There are a number of different encryption algorithms in use today. Some have been developed by the U.S government and others have been developed by IBM and other commercial enterprises You can learn more about the development of encryption algorithms, including an evaluation of currently available algorithms, by consulting a Web security textbook (see for example, the Mackey reference in the For Further Study and Research section at the end of the book Messages are encrypted just before they are sent over a network or the Internet. Upon arrival, each message is decoded, or decrypted, using a decryption program a type of encryption-reversing procedure. Encryption algorithms are considered so vitally important to preserving security within the United States that the National Security Agency has control over their dissemination. Some encryption algorithms are considered so important that the U.S. government has banned publication of details about them. Currently, it is illegal for U.S. companies to export some of these encryption algorithms. The Freedom Forum Online contains a number of articles on lawsuits and legislation surrounding encryption export laws. Critics consider publication restrictions a freedom of speech issue. If you are interested in reading more about the latest arguments in the ongoing debates over freedom of speech and export law, search the Freedom Forum using the keyword "encryption" as the search term. One property of encryption algorithms is that someone can know the details of the algorithm and still not be able to decipher the encrypted message without knowing the key that the algorithm used to encrypt the message. The resistance of an encrypted message to attack attempts depends on the size (in bits) of the key used in the encryption procedure. A 40-bit key is currently considered to provide minimal level of security. Longer keys, such as 128-bit keys, provide much more secure encryption. A sufficiently long key can help make the security unbreakable. The type of key and associated encryption program used to lock a message, or otherwise manipulate it, subdivides encryption into three functions: 1. Hash coding 2. Asymmetric encryption 3. Symmetric encryption