What is the semantic difference between encipher and encrypt?
In French, there are two words, "chiffrer" and "crypter"; theoretically, the latter would mean "to encrypt but without knowledge of the key, i.e. as part of an attack" (it is more often encountered as "décrypter" which means "to decrypt without prior knowledge of the key"). Relatively few French-speaking programmers are even aware of that distinction, and the French translations of many applications (including Outlook Express) use "crypter" in places where they should use "chiffrer".
In English, I do not think that this distinction actually exists. "Encipher" and "chiffrer" both come from the Arabic "sifr" which means "zero", while "encrypt" and "crypter" come from the Greek "kryptos" (hidden, secret). The use of "sifr" can apparently be traced back to Giovan Battista Bellaso, who published in 1553 cryptographic methods in Latin (as was normal at the time) but with Italian titles such as "La Cifra" and "Novi et singolari modi di cifrare". His point was that his cryptographic techniques involved some computations with numbers, and in 16th century Italy, mathematics was still an import from old Greek by way of Arab writers, brought to Christian Europe during the Crusades. Hence the use of the Arabic root.
In that sense, one could say that "to encipher" means "to encrypt, with some mathematics involved in the process". By definition, this covers any encryption in which a computer was used, so the terms "encipher" and "encrypt" are practically synonymous.
There are a number of differences depending on context:
Outside of cryptology decipherment refers to decoding or understanding codes and languages that are not designed to keep secrets but are unknown. For example determining the genetic code or figuring out how to translate mayan.
"If one 'enciphers,' then one is using reversible cryptography. If one 'encrypts,' then one might be using either reversible cryptography or irreversible cryptography".
While cryptology contains reversible function and non-reversible 'one-way' functions, the term encryption/decryption explicitly refers only to reversible functions.
"In cryptography, encryption is the process of transforming information (referred to as plaintext) using an algorithm (called cipher) to make it unreadable to anyone except those possessing special knowledge, usually referred to as a key." - http://en.wikipedia.org/wiki/Encryption
There is not any difference as such, in non-technical usage, a 'cipher' is the same thing as a 'code'; however, the concepts are distinct in cryptography. In classical cryptography, ciphers are distinguished from codes.
Codes generally substitute different length strings of characters in the output, while the ciphers generally substitute the same number of characters as are in the input.
In modern usage, the two are synonymous. Historically, though, "decrypt" and "decipher" had different meanings, and "encrypt" was nonsense.
Originally, "decrypt" was decoding a message without the key. (Because crypts had mysterious messages that we wanted to understand? Probably not: the Greek root for both is kryptos, meaning hidden.)
A "cipher" is a means of translating an alphabet into a different representation (versus a "code" which translates based on the meaning of the message rather than the way it is written in some alphabet.) I'm using the term "alphabet" loosely here.
So, what we now call "encrypting" was originally called "enciphering", meaning, to encode the message using some algorithm and key. "Deciphering" was the opposite process, knowing the algorithm and key.
"Decrypting" was figuring out the message without knowing the algorithm or key.
"Encypher" made no sense: it meant, if anything, encoding a message without knowing the algorithm or key.
Thanks to sloppy use of terminology by us programmers, these words have lost their distinctions, so now, "xxcipher" and "xxcrypt" are synonymous.
Note that this is "English.stackexchange.com" and not "stackoverflow.com" or "security.stackexchange.com".
Semantically speaking, the following may be inaccurate. However, I'll leave it here for future reference.
I've worked in a project where to encipher a piece of data, you would actually use the decryption function of the cipher. (The reason was to save on hardware implementation costs.) In order to be clear on the operation you wanted to perform on the data, encipher would mean to transform plaintext into ciphertext and decipher would mean to transform ciphertext into plaintext.
For example, I would encipher a piece of data by decrypting that data with cipher X. I would also decipher a piece of data by decrypting that data with cipher X. (This is possible because the data is exchanged with another device that can only use the encryption function of cipher X.)
Cryptography includes two basic kinds of operations: reversible cryptographic operations and irreversible cryptographic operations. The reversible cryptographic operations are also known as ciphers, while the irreversible cryptographic operations are also known as hash algorithms or digests.
From my own observations on common usage and abusage: If one "enciphers," then one is using reversible cryptography. If one "encrypts," then one might be using either reversible cryptography or irreversible cryptography.
Whether this distinction has any technical merit, and whether this distinction is in fact how the terms are commonly used, are questions that I am unable to answer.