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

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版本:

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,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

Original: https://www.cnblogs.com/tianciliangen/p/9925529.html
Author: 天王星天
Title: TripleDES加解密Java、C#、php通用代码

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/539029/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java8新特性学习

    具体内容: Java新特性讲解 笔记(其他小伙伴做的笔记,挺好的): 百度网盘链接: https://pan.baidu.com/s/16tiel9pu_4O5M1oAL5-cqA…

    Java 2023年5月29日
    084
  • java 基本数据类型相关思考

    1:自动装箱、拆箱 例子: Integer a = 10; //this is autoboxing //上面的操作其实就是下面这个,编译器会帮你自动转,不用手动 Integer …

    Java 2023年5月29日
    072
  • 戏说领域驱动设计(二十)——值对象

    值对象这个东西在DDD里算是比较抽象的,好多人学了半天也学不明白。我这种聪明人也费了好大劲,总算苦心人天不负,现在也能用个有模有样了。战术模式中不论是领域服务、对象工厂还是资源库,…

    Java 2023年6月7日
    071
  • 面试突击62:group by 有哪些注意事项?

    注意:本文以下内容基于 MySQL 5.7 InnoDB 数据库引擎。 1.group by 后面不能加 where 在 MySQL 中,所有的 SQL 查询语法要遵循以下语法顺序…

    Java 2023年5月29日
    0103
  • ch03 Java基础

    JAVA基础 JAVA基础 数据类型 类型转换 变量 类变量和实例变量的区别和联系 常量 变量命名规范 运算符 位运算 包机制 JavaDoc 数据类型 强类型语言 要求变量的使用…

    Java 2023年6月9日
    072
  • 在uniapp中使用百度地图的Autocomplete(关键字自动完成提示)不弹出提示框的问题

    let ac = new BMap.Autocomplete({ "input": document.querySelector(‘input’), &quot…

    Java 2023年6月6日
    086
  • 常用通用简单文件上传功能

    1 /// 2 /// Web文件上传简单处理 3 /// 4 pu…

    Java 2023年6月5日
    050
  • Final

    final 基本介绍: final可以修饰类、属性、方法和局部变量 下面情况下可能会用到final 当不希望类被继承时,可以用final修饰; 当不希望父类的某个方法被子类覆盖/重…

    Java 2023年6月5日
    077
  • 职场进阶指南:大厂人必看书籍推荐

    我曾结合自己的工作实践总结过产品经理需要的一些基本素质,如市场洞察、抽象概括、创新想象、心思细腻、热爱产品、具备一定的企业家精神等等。在我看来,大厂人理更应该是通才,在市场、设计、…

    Java 2023年6月5日
    0109
  • Java POJO划分

    PO Persistant Object 的缩写,用于表示数据库中的一条记录映射成的 java 对象。PO 仅仅用于表示数据,没有任何数据操作。通常遵守 Java Bean 的规范…

    Java 2023年5月29日
    083
  • 程序员最容易读错的单词,听到status我炸了

    最近在跟同事讨论问题的时候,他突然对我说。。。 这个 死太丢死不太对,需要改一下。。。 我当时应该是愣住了,然后想了一下,你说的是 status 吗??? 看着他疑惑不解的眼神,我…

    Java 2023年6月13日
    070
  • MarkDown学习

    MarkDown学习 二级标题 三级标题 四级标题 MarkDown语法中’#’代表一级标题最高支持六级标题 字体 helloWord!//在字体两边各加*…

    Java 2023年6月14日
    071
  • spring中Bean的生命周期

    1、 实例化bean:反射的方式生成对象 2、 填充bean的属性:populateBean(),进行依赖注入,这里可以扩展出循环依赖问题(三级缓存) 3、 调用aware接口相关…

    Java 2023年6月8日
    084
  • 解决eclipse为什么不能查看源码

    自己学习路上用过的方法,有帮助记得点赞哟~ Java eclipse中查看源代码ctrl+左键单击 一、你是第一次使用该功能,没有导入项目源码,故无法查看源码 解决方法: ​1.点…

    Java 2023年6月5日
    097
  • 【Unity Shader学习笔记】Unity光照-渲染路径

    官方文档:渲染路径 1、简介 需要为每个 Shader 设置正确的渲染路径。 大多数情况下,一个项目只使用一种渲染路径,因此我们可以为整个项目设置渲染时的渲染路径。 Edit -&…

    Java 2023年6月9日
    0114
  • [水贴]GALGAME 怎么判定好感度?

    判定好感度最好就是分析剧本,我们以恋盾为例 这是文本包下载地址: http://blog.sina.com.cn/s/blog_624893280100vymp.html 我们打开…

    Java 2023年5月29日
    084
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球