PHP和C#3DES加密
需要将以下函数从PHP转换为C#(asp.net)
function encrypt_3DES($message, $key){ // Se establece un IV por defecto $bytes = array(0,0,0,0,0,0,0,0); //byte [] IV = {0, 0, 0, 0, 0, 0, 0, 0} $iv = implode(array_map("chr", $bytes)); //PHP 4 >= 4.0.2 // Se cifra $ciphertext = mcrypt_encrypt(MCRYPT_3DES, $key, $message, MCRYPT_MODE_CBC, $iv); //PHP 4 >= 4.0.2 return $ciphertext; }
其中$message
是要编码的字符串, $key
是键
$key
是base 64编码的,在调用函数之前会被解码
$key = $this->decodeBase64($key); $ciphertext = $this->encrypt_3DES($message, $key);
按照我使用的C#代码:
key = Base64Decode(key); ciphertext = encrypt_3DES(order, key,true);
哪里
private string Base64Decode(string base64EncodedData) { byte[] base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData); return Encoding.GetEncoding(28591).GetString(base64EncodedBytes); // 28591 for php compatibility }
和
private string encrypt_3DES(string message, string k,bool useHashing) { byte[] keyArray; byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(message); //If hashing use get hashcode regards to your key if (useHashing) { MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider(); keyArray = hashmd5.ComputeHash(Encoding.GetEncoding(28591).GetBytes(k)); //Always release the resources and flush data // of the Cryptographic service provide. Best Practice hashmd5.Clear(); } else keyArray = UTF8Encoding.GetEncoding(28591).GetBytes(k); TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider(); //set the secret key for the tripleDES algorithm tdes.Key = keyArray; //mode of operation. there are other 4 modes. //We choose ECB(Electronic code Book) tdes.Mode = CipherMode.ECB; //padding mode(if any extra byte added) tdes.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = tdes.CreateEncryptor(); //transform the specified region of bytes array to resultArray byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); //Release resources held by TripleDes Encryptor tdes.Clear(); //Return the encrypted data into unreadable string format return Convert.ToBase64String(resultArray, 0, resultArray.Length); }
PHP和C#的结果不一样。
我在这个西class牙语网站上找到了一个适合我的代码。 https://www.resuelvetusproblemas.com/convertir-encriptacion-en-php-3des-en-c/
这是C#中的函数与您在PHP中编写的函数相同
上述就是C#学习教程:PHP和C#3DES加密分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
public static byte[] TripleDESEncrypt(string texto, byte[] key) { using (TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider()) { byte[] iv_0 = { 0, 0, 0, 0, 0, 0, 0, 0 }; byte[] toEncryptArray = Encoding.ASCII.GetBytes(texto); tdes.IV = iv_0; //assign the secret key tdes.Key = key; tdes.Mode = CipherMode.CBC; tdes.Padding = PaddingMode.Zeros; ICryptoTransform cTransform = tdes.CreateEncryptor(); //transform the specified region of bytes array to resultArray byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); //Clear to Best Practices tdes.Clear(); return resultArray; } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1000768.html