博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TripleDES加解密Java、C#、php通用代码
阅读量:4677 次
发布时间:2019-06-09

本文共 6818 字,大约阅读时间需要 22 分钟。

TripleDES说明:
    TripleDES(3Des)和Des都是对称加密算法,TripleDes是Des加密算法的增强版本,这里主要说的是TripleDes加密算法的应用。
    工作中由于涉及到不同系统的对接,整理了Java、C#和php通用的算法代码,直接看代码:
 
Java版本:
package com.jaamy.common.util;    import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;import org.apache.commons.codec.binary.Base64;    public class DefaultEncryptor {            private static final String ALGORITHM = "DESede";        //默认为 DESede/ECB/PKCS5Padding    private static final String CIPHER_TRANSFORMAT = "DESede/ECB/PKCS5Padding";        private static final String ENCODING = "UTF-8";             public static String encryptToBase64(String plainText, String key) throws Exception {        SecretKey deskey = new SecretKeySpec(key.getBytes(), ALGORITHM);        Cipher c1 = Cipher.getInstance(CIPHER_TRANSFORMAT);        c1.init(Cipher.ENCRYPT_MODE, deskey);        byte[] result = c1.doFinal(plainText.getBytes(ENCODING));             return Base64.encodeBase64String(result);     }       public static String decryptFromBase64(String base64, String key) throws Exception {        SecretKey deskey = new SecretKeySpec(key.getBytes(), ALGORITHM);        Cipher c1 = Cipher.getInstance(CIPHER_TRANSFORMAT);        c1.init(Cipher.DECRYPT_MODE, deskey);        byte[] result = c1.doFinal(Base64.decodeBase64(base64));              return new String(result, ENCODING);    }}

C#版本:

using System;using System.IO;using System.Security.Cryptography;using System.Security.Cryptography.X509Certificates;using System.Text;using System.Web;   namespace DesEncryptor{    class DefaultEncryptor    {        #region DES 加密        public static string encryptToBase64(string plainText, string key)        {            try            {                // Create a MemoryStream.                MemoryStream mStream = new MemoryStream();                TripleDESCryptoServiceProvider tripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider();                tripleDESCryptoServiceProvider.Key = Encoding.ASCII.GetBytes(key);                tripleDESCryptoServiceProvider.Padding = PaddingMode.PKCS7;//补位                tripleDESCryptoServiceProvider.Mode = CipherMode.ECB;//CipherMode.CBC                CryptoStream cStream = new CryptoStream(mStream,                    tripleDESCryptoServiceProvider.CreateEncryptor(),                    CryptoStreamMode.Write);                   // Convert the passed string to a byte array.                byte[] toEncrypt = Encoding.UTF8.GetBytes(plainText);                   // Write the byte array to the crypto stream and flush it.                cStream.Write(toEncrypt, 0, toEncrypt.Length);                cStream.FlushFinalBlock();                   // Get an array of bytes from the                // MemoryStream that holds the                // encrypted data.                byte[] ret = mStream.ToArray();                   // Close the streams.                cStream.Close();                mStream.Close();                   // Return the encrypted buffer.                return Convert.ToBase64String(ret);            }            catch (CryptographicException e)            {                Console.WriteLine("A Cryptographic error occurred: {0}", e.Message);                return null;            }        }        #endregion           #region DES解密        public static string decryptFromBase64(string base64, string key)        {            try            {                byte[] inputByteArray = Convert.FromBase64String(base64);                // Create a new MemoryStream using the passed                // array of encrypted data.                MemoryStream msDecrypt = new MemoryStream(inputByteArray);                   // Create a CryptoStream using the MemoryStream                TripleDESCryptoServiceProvider tripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider();                tripleDESCryptoServiceProvider.Key = ASCIIEncoding.ASCII.GetBytes(key);                tripleDESCryptoServiceProvider.Padding = PaddingMode.PKCS7;//补位                tripleDESCryptoServiceProvider.Mode = CipherMode.ECB;//CipherMode.CBC                CryptoStream csDecrypt = new CryptoStream(msDecrypt,                    tripleDESCryptoServiceProvider.CreateDecryptor(),                    CryptoStreamMode.Read);                   // Create buffer to hold the decrypted data.                byte[] fromEncrypt = new byte[inputByteArray.Length];                   // Read the decrypted data out of the crypto stream                // and place it into the temporary buffer.                csDecrypt.Read(fromEncrypt, 0, fromEncrypt.Length);                   //Convert the buffer into a string and return it.                return Encoding.UTF8.GetString(fromEncrypt).TrimEnd('\0');            }            catch (CryptographicException e)            {                Console.WriteLine("A Cryptographic error occurred: {0}", e.Message);                return null;            }           }        #endregion    }}

php版本:

pkcs5_pad($input, $size); $key = str_pad($key,24,'0'); $td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_ECB, ''); $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND); @mcrypt_generic_init($td, $key, $iv); $data = mcrypt_generic($td, $input); mcrypt_generic_deinit($td); mcrypt_module_close($td); $data = base64_encode($data); return $data; } function decrypt($encrypted, $key){ $encrypted = base64_decode($encrypted); $key = str_pad($key,24,'0'); $td = mcrypt_module_open(MCRYPT_3DES,'',MCRYPT_MODE_ECB,''); $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND); $ks = mcrypt_enc_get_key_size($td); @mcrypt_generic_init($td, $key, $iv); $decrypted = mdecrypt_generic($td, $encrypted); mcrypt_generic_deinit($td); mcrypt_module_close($td); $y=$this->pkcs5_unpad($decrypted); return $y; } function pkcs5_pad ($text, $blocksize) { $pad = $blocksize - (strlen($text) % $blocksize); return $text . str_repeat(chr($pad), $pad); } function pkcs5_unpad($text){ $pad = ord($text{strlen($text)-1}); if ($pad > strlen($text)) { return false; } if (strspn($text, chr($pad), strlen($text) - $pad) != $pad){ return false; } return substr($text, 0, -1 * $pad); }} $des = new CryptDes();$encrypt_str = $des->encrypt("1111","012345678901234567890123");//加密字符串echo $encrypt_str."\n";echo $decrypt_str = $des->decrypt($encrypt_str,"012345678901234567890123");//解密字符串?>

 

https://www.cnblogs.com/jaamy/p/6118622.html

转载于:https://www.cnblogs.com/tianciliangen/p/9925529.html

你可能感兴趣的文章
务虚的全栈式开发
查看>>
[Coci2015]Divljak
查看>>
centos7中keepalived+nginx做双机热备和反向代理
查看>>
HDU 1250
查看>>
Introduction to my galaxy engine 6: Differed Lighting 2
查看>>
Python_深浅拷贝
查看>>
Oracle 中 not exists (select 'X' ...) 的含义
查看>>
Android必备的Java知识点
查看>>
ASP.NET网站实现中英文转换(本地化资源)【转】
查看>>
vue中 关于$emit的用法
查看>>
计算机基本介绍
查看>>
使用Flickr的图片拼出你的句子
查看>>
Visual Studio中web应用程序和网站区别
查看>>
浅析/dev/shm
查看>>
BZOJ4010 HNOI2015 菜肴制作 拓扑排序+贪心
查看>>
处理打拼音时触发input事件bug
查看>>
074-PHP数组元素相乘
查看>>
Android性能调优篇之UI布局优化
查看>>
DateUtils
查看>>
Java -- IO -- 目录
查看>>