TripleDES说明:
    TripleDES(3Des)和Des都是对称加密算法,TripleDes是Des加密算法的增强版本,这里主要说的是TripleDes加密算法的应用。
    工作中由于涉及到不同系统的对接,整理了Java、C#和php通用的算法代码,直接看代码:
Java版本:

  1. package com.jaamy.common.util;
  2.  
  3. import javax.crypto.Cipher;
  4. import javax.crypto.SecretKey;
  5. import javax.crypto.spec.SecretKeySpec;
  6. import org.apache.commons.codec.binary.Base64;
  7.  
  8. public class DefaultEncryptor {
  9.  
  10. private static final String ALGORITHM = "DESede";
  11.  
  12. //默认为 DESede/ECB/PKCS5Padding
  13. private static final String CIPHER_TRANSFORMAT = "DESede/ECB/PKCS5Padding";
  14.  
  15. private static final String ENCODING = "UTF-8";
  16.  
  17. public static String encryptToBase64(String plainText, String key) throws Exception {
  18. SecretKey deskey = new SecretKeySpec(key.getBytes(), ALGORITHM);
  19. Cipher c1 = Cipher.getInstance(CIPHER_TRANSFORMAT);
  20. c1.init(Cipher.ENCRYPT_MODE, deskey);
  21. byte[] result = c1.doFinal(plainText.getBytes(ENCODING));
  22. return Base64.encodeBase64String(result);
  23. }
  24.  
  25. public static String decryptFromBase64(String base64, String key) throws Exception {
  26. SecretKey deskey = new SecretKeySpec(key.getBytes(), ALGORITHM);
  27. Cipher c1 = Cipher.getInstance(CIPHER_TRANSFORMAT);
  28. c1.init(Cipher.DECRYPT_MODE, deskey);
  29. byte[] result = c1.doFinal(Base64.decodeBase64(base64));
  30. return new String(result, ENCODING);
  31. }
  32. }

C#代码:

  1. using System;
  2. using System.IO;
  3. using System.Security.Cryptography;
  4. using System.Security.Cryptography.X509Certificates;
  5. using System.Text;
  6. using System.Web;
  7.  
  8. namespace DesEncryptor
  9. {
  10. class DefaultEncryptor
  11. {
  12. #region DES 加密
  13. public static string encryptToBase64(string plainText, string key)
  14. {
  15. try
  16. {
  17. // Create a MemoryStream.
  18. MemoryStream mStream = new MemoryStream();
  19. TripleDESCryptoServiceProvider tripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider();
  20. tripleDESCryptoServiceProvider.Key = Encoding.ASCII.GetBytes(key);
  21. tripleDESCryptoServiceProvider.Padding = PaddingMode.PKCS7;//补位
  22. tripleDESCryptoServiceProvider.Mode = CipherMode.ECB;//CipherMode.CBC
  23. CryptoStream cStream = new CryptoStream(mStream,
  24. tripleDESCryptoServiceProvider.CreateEncryptor(),
  25. CryptoStreamMode.Write);
  26.  
  27. // Convert the passed string to a byte array.
  28. byte[] toEncrypt = Encoding.UTF8.GetBytes(plainText);
  29.  
  30. // Write the byte array to the crypto stream and flush it.
  31. cStream.Write(toEncrypt, , toEncrypt.Length);
  32. cStream.FlushFinalBlock();
  33.  
  34. // Get an array of bytes from the
  35. // MemoryStream that holds the
  36. // encrypted data.
  37. byte[] ret = mStream.ToArray();
  38.  
  39. // Close the streams.
  40. cStream.Close();
  41. mStream.Close();
  42.  
  43. // Return the encrypted buffer.
  44. return Convert.ToBase64String(ret);
  45. }
  46. catch (CryptographicException e)
  47. {
  48. Console.WriteLine("A Cryptographic error occurred: {0}", e.Message);
  49. return null;
  50. }
  51. }
  52. #endregion
  53.  
  54. #region DES解密
  55. public static string decryptFromBase64(string base64, string key)
  56. {
  57. try
  58. {
  59. byte[] inputByteArray = Convert.FromBase64String(base64);
  60. // Create a new MemoryStream using the passed
  61. // array of encrypted data.
  62. MemoryStream msDecrypt = new MemoryStream(inputByteArray);
  63.  
  64. // Create a CryptoStream using the MemoryStream
  65. TripleDESCryptoServiceProvider tripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider();
  66. tripleDESCryptoServiceProvider.Key = ASCIIEncoding.ASCII.GetBytes(key);
  67. tripleDESCryptoServiceProvider.Padding = PaddingMode.PKCS7;//补位
  68. tripleDESCryptoServiceProvider.Mode = CipherMode.ECB;//CipherMode.CBC
  69. CryptoStream csDecrypt = new CryptoStream(msDecrypt,
  70. tripleDESCryptoServiceProvider.CreateDecryptor(),
  71. CryptoStreamMode.Read);
  72.  
  73. // Create buffer to hold the decrypted data.
  74. byte[] fromEncrypt = new byte[inputByteArray.Length];
  75.  
  76. // Read the decrypted data out of the crypto stream
  77. // and place it into the temporary buffer.
  78. csDecrypt.Read(fromEncrypt, , fromEncrypt.Length);
  79.  
  80. //Convert the buffer into a string and return it.
  81. return Encoding.UTF8.GetString(fromEncrypt).TrimEnd('\0');
  82. }
  83. catch (CryptographicException e)
  84. {
  85. Console.WriteLine("A Cryptographic error occurred: {0}", e.Message);
  86. return null;
  87. }
  88.  
  89. }
  90. #endregion
  91. }
  92. }

PHP代码:

  1. <?php
  2. class CryptDes {
  3.  
  4. function encrypt($input, $key){
  5. $size = mcrypt_get_block_size(MCRYPT_3DES,MCRYPT_MODE_ECB);
  6. $input = $this->pkcs5_pad($input, $size);
  7. $key = str_pad($key,,'');
  8. $td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_ECB, '');
  9. $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
  10. @mcrypt_generic_init($td, $key, $iv);
  11. $data = mcrypt_generic($td, $input);
  12. mcrypt_generic_deinit($td);
  13. mcrypt_module_close($td);
  14. $data = base64_encode($data);
  15. return $data;
  16. }
  17.  
  18. function decrypt($encrypted, $key){
  19. $encrypted = base64_decode($encrypted);
  20. $key = str_pad($key,,'');
  21. $td = mcrypt_module_open(MCRYPT_3DES,'',MCRYPT_MODE_ECB,'');
  22. $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
  23. $ks = mcrypt_enc_get_key_size($td);
  24. @mcrypt_generic_init($td, $key, $iv);
  25. $decrypted = mdecrypt_generic($td, $encrypted);
  26. mcrypt_generic_deinit($td);
  27. mcrypt_module_close($td);
  28. $y=$this->pkcs5_unpad($decrypted);
  29. return $y;
  30. }
  31.  
  32. function pkcs5_pad ($text, $blocksize) {
  33. $pad = $blocksize - (strlen($text) % $blocksize);
  34. return $text . str_repeat(chr($pad), $pad);
  35. }
  36.  
  37. function pkcs5_unpad($text){
  38. $pad = ord($text{strlen($text)-});
  39. if ($pad > strlen($text)) {
  40. return false;
  41. }
  42. if (strspn($text, chr($pad), strlen($text) - $pad) != $pad){
  43. return false;
  44. }
  45. return substr($text, , - * $pad);
  46. }
  47. }
  48.  
  49. $des = new CryptDes();
  50. $encrypt_str = $des->encrypt("","");//加密字符串
  51. echo $encrypt_str."\n";
  52. echo $decrypt_str = $des->decrypt($encrypt_str,"");//解密字符串
  53. ?>

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. Scrapy 安装与使用

    Scrapy的安装: 当前环境win10,python_3.6.4,64bit.在命令提示符窗口运行pip install Scrapy,出现以下结果: building 'twisted.test. ...

  2. Java 之 网络编程基础

    一.软件结构 C/S 结构:全称为 Client/Server 结构,是指客户端和服务器结构.常见的程序有微信,QQ,迅雷等软件. B/S 结构:全称 Brower/Server 结构,是指浏览器和服 ...

  3. 在Linux中安装适用于arm64位的nodejs

    # 安装适用于arm64位的nodejs runtime v10.16.3 mkdir /runtimes cd /runtimes wget https://nodejs.org/dist/v10. ...

  4. Redis未授权漏洞检测工具

    Redis未授权检测小工具 #!/usr/bin/python3 # -*- coding: utf-8 -*- """ @Author: r0cky @Time: 20 ...

  5. 十年种树----小白的起点save

    大家好,给大家介绍一下我自己.各平台通用ID:琴鬼白羊,男,一个24岁学习采矿工程的在读研究僧,一个24岁还在想学习计算机的小白. 非洲经济学家Dambisa Moyo在他的<dead aid& ...

  6. Gym - 102346D Denouncing Mafia 取k叶子节点使叶子到根覆盖节点数最大

    给你一棵树 你可以取K条链 一条链为根到叶子的路径 问你K条链最多覆盖树上多少个节点 贪心的做 肯定是每次取最长链 但是取完最长链 一颗树就会变为若干个森林 我们要维护当前所有森林里的最长链 ans数 ...

  7. 网站添加logo图片

    网站添加log图片 第一种方法 这里使用的图片一般为16*16大小的图片 <link rel="shortcut icon" href="http://xxx.xx ...

  8. LG3690 【模板】Link Cut Tree 和 SDOI2008 洞穴勘测

    UPD:更新了写法. [模板]Link Cut Tree 给定n个点以及每个点的权值,要你处理接下来的m个操作.操作有4种.操作从0到3编号.点从1到n编号. 后接两个整数(x,y),代表询问从x到y ...

  9. PL/SQL复合类型

    一.PL/SQL记录:一条记录. 可简化单行多列的数据的处理.当使用pl/sql记录时,应用开发人员即可以自定义记录类型和记录变量,也可以使用%rowtype属性直接定义记录变量. 1.当使用自定义的 ...

  10. GIT的创建和使用

    1.创建git文件模式 https://www.cnblogs.com/wupeiqi/p/7295372.html  参考地址 先看这个 初始化仓库 git init      在本地新建一个rep ...