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, , 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, , 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代码:

<?php
class CryptDes { function encrypt($input, $key){
$size = mcrypt_get_block_size(MCRYPT_3DES,MCRYPT_MODE_ECB);
$input = $this->pkcs5_pad($input, $size);
$key = str_pad($key,,'');
$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,,'');
$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)-});
if ($pad > strlen($text)) {
return false;
}
if (strspn($text, chr($pad), strlen($text) - $pad) != $pad){
return false;
}
return substr($text, , - * $pad);
}
} $des = new CryptDes();
$encrypt_str = $des->encrypt("","");//加密字符串
echo $encrypt_str."\n";
echo $decrypt_str = $des->decrypt($encrypt_str,"");//解密字符串
?>

TripleDES加解密Java、C#、php的更多相关文章

  1. TripleDES加解密Java、C#、php通用代码

    TripleDES说明:     TripleDES(3Des)和Des都是对称加密算法,TripleDes是Des加密算法的增强版本,这里主要说的是TripleDes加密算法的应用.     工作中 ...

  2. Rsa加解密Java、C#、php通用代码 密钥转换工具

    之前发了一篇"TripleDes的加解密Java.C#.php通用代码",后面又有项目用到了Rsa加解密,还是在不同系统之间进行交互,Rsa在不同语言的密钥格式不一样,所以过程中主 ...

  3. Des加解密(Java端和Js端配套)解析

    一.什么是DES加密        des对称加密,对称加密,是一种比较传统的加密方式,其加密运算.解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码( ...

  4. 自己实现简单的RSA秘钥生成与加解密(Java )

    最近在学习PKI,顺便接触了一些加密算法.对RSA着重研究了一下,自己也写了一个简单的实现RSA算法的Demo,包括公.私钥生成,加解密的实现.虽然比较简单,但是也大概囊括了RSA加解密的核心思想与流 ...

  5. SM2的非对称加解密java工具类

    maven依赖 <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov- ...

  6. AES 加解密 Java实现

    package com.smt.cipher.symmetry; import java.nio.charset.Charset; import java.security.SecureRandom; ...

  7. 加解密---Java安全

    一.概述 1.JCA(Java Cryptography Architecture) 提供基本的加密框架(消息摘要.数字签名......) 2.JCE(Java Cryptography Extens ...

  8. Java 加解密 AES DES TripleDes

    package xxx.common.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.crypt ...

  9. Java拓展教程:文件DES加解密

    Java拓展教程:文件加解密 Java中的加密解密技术 加密技术根据一般可以分为对称加密技术和非对称加密技术.对称加密技术属于传统的加密技术,它的加密和解密的密钥是相同的,它的优点是:运算速度快,加密 ...

随机推荐

  1. React/虚拟DOM

    在说虚拟DOM之前,先来一个引子,从输入url到展现出整个页面都有哪些过程? 1.输入网址 2.DNS解析 3.建立tcp连接 4.客户端发送HTPP请求 5.服务器处理请求 6.服务器响应请求 7. ...

  2. wampserver的使用配置

    1.正常安装就不说了,只需要把安装位置改成需要的位置就可以了.其它的默认就可以了. 2.安装完成之后打开wampserver. 3.现在该修改密码了: (1)点击进入mysql控制台. (2)Wamp ...

  3. linux 命令 wc

    语法:wc [选项] 文件… 说明:该命令统计给定文件中的字节数.字数.行数.如果没有给出文件名,则从标准输入读取.wc同时也给出所有指定文件的总统计数.字是由空格字符区分开的最大字符串. (1) 统 ...

  4. nginx 作为静态资源web服务

    Nginx作为静态资源web服务 静态资源web服务-CDN场景 Nginx资源存储中心会把静态资源分发给“北京Nginx”,“湖南Nginx”,“山东Nginx”. 然后北京User发送静态资源请求 ...

  5. microsoft office 2007 在已经安装pdf maker的情况下另存为没有adobe pdf选项

    通常,此类情况是pdf maker 插件被禁用导致,点击office 2007左上角菜单栏,选项,加载项,在管理处选择禁用项目, 找到acrobat pdf maker office com addi ...

  6. 修改 hosts 完成域名绑定

    修改 hosts 完成域名绑定 mac 用户直接执行 vim /private/etc/hosts在 hosts 文件最后添加一行: 127.0.0.1a.com 这一句是什么意思呢? 就是告诉我们的 ...

  7. 一份令人愉快的vs代码包和资源的整理清单

    https://viatsko.github.io/awesome-vscode/ https://github.com/viatsko/awesome-vscode

  8. seastar笔记

    1.seastar::A.then([]{B});C:的核心思想是说我们开始了A之后就开始B,开始B之后就开始C,而不需要等A做完了再做B,B做完再做C 2.通常的return是一个需要执行的函数,例 ...

  9. AirTest与模拟器连接(二)

    如果我们手边没有可用的Android真机,又想进行Android应用自动化测试,这时候就要使用AirtestIDE的Android模拟器自动化测试功能了. AirtestIDE所支持的模拟器包括 An ...

  10. Educational Codeforces Round 76 (Rated for Div. 2) D题

    题意: 给你n个关卡,每个关卡有一个怪物,怪物的攻击力为a[i],你有n个英雄,每个英雄有一个攻击力,和疲劳值,只要英雄的攻击力比怪物的高就算打过了,同时疲劳减一,一天只能出战一个英雄,一个英雄可以打 ...