When using 3DES between PHP and C#, it is to be noted that there are subtle differences that if not strictly observed, will result in annoying problem encrypt/decrypt data.
1), When using a 16 bytes key, php and c# generates total different outcome string. it seems that a 24 bytes key is required for php and c# to work alike.
2), php doesnt have a "padding" option, while c# has 3 (?). My work around is to add nulls i.e. chr(0) to the end of the source string to make its size times of 8, while in c#, PaddingMode.Zeros is required.
3) the key size has to be times of 8, in php, to make it work for c#.
Mcrypt
- Introduction
- Installation/Configuration
- Constantes pré-définies
- Modes de chiffrement Mcrypt
- Exemples
- Fonctions Mcrypt
- mcrypt_cbc — Chiffre/déchiffre des données en mode CBC
- mcrypt_cfb — Chiffre/déchiffre des données en mode CFB
- mcrypt_create_iv — Crée un vecteur d'initialisation à partir d'une source aléatoire
- mcrypt_decrypt — Déchiffre un texte avec les paramètres donnés
- mcrypt_ecb — Obsolète : Chiffre/déchiffre des données en mode ECB
- mcrypt_enc_get_algorithms_name — Retourne le nom de l'algorithme de chiffrement
- mcrypt_enc_get_block_size — Retourne la taille du bloc d'un algorithme
- mcrypt_enc_get_iv_size — Retourne la taille du VI d'un algorithme
- mcrypt_enc_get_key_size — Retourne la taille maximale de la clé pour un mode
- mcrypt_enc_get_modes_name — Retourne le nom du mode
- mcrypt_enc_get_supported_key_sizes — Retourne un tableau contenant les tailles de clés acceptées par un algorithme
- mcrypt_enc_is_block_algorithm_mode — Teste le chiffrement par blocs d'un mode
- mcrypt_enc_is_block_algorithm — Teste le chiffrement par blocs d'un algorithme
- mcrypt_enc_is_block_mode — Teste si le mode retourne les données par blocs
- mcrypt_enc_self_test — Teste un module ouvert
- mcrypt_encrypt — Chiffre un texte
- mcrypt_generic_deinit — Prépare le module pour le déchargement
- mcrypt_generic_end — Termine un chiffrement
- mcrypt_generic_init — Initialise tous les buffers nécessaires
- mcrypt_generic — Chiffre les données
- mcrypt_get_block_size — Retourne la taille de blocs d'un chiffrement
- mcrypt_get_cipher_name — Lit le nom du chiffrement utilisé
- mcrypt_get_iv_size — Retourne la taille du VI utilisé par un couple chiffrement/mode
- mcrypt_get_key_size — Retourne la taille de la clé d'un chiffrement
- mcrypt_list_algorithms — Liste tous les algorithmes de chiffrement supportés
- mcrypt_list_modes — Liste tous les modes de chiffrement supportés
- mcrypt_module_close — Décharge le module de chiffrement
- mcrypt_module_get_algo_block_size — Retourne la taille de blocs d'un algorithme
- mcrypt_module_get_algo_key_size — Retourne la taille maximale de clé
- mcrypt_module_get_supported_key_sizes — Retourne un tableau contenant les tailles de clés supportées par l'algorithme ouvert
- mcrypt_module_is_block_algorithm_mode — Indique si un mode fonctionne par blocs
- mcrypt_module_is_block_algorithm — Indique si un algorithme fonctionne par blocs
- mcrypt_module_is_block_mode — Indique si un mode travaille par blocs
- mcrypt_module_open — Ouvre le module de l'algorithme et du mode à utiliser
- mcrypt_module_self_test — Teste un mode
- mcrypt_ofb — Chiffre/déchiffre des données en mode OFB
- mdecrypt_generic — Déchiffre les données
Mcrypt
Anonymous
16-Oct-2009 03:11
16-Oct-2009 03:11
