TripleDES加解密Java、C#、php
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的更多相关文章
- TripleDES加解密Java、C#、php通用代码
TripleDES说明: TripleDES(3Des)和Des都是对称加密算法,TripleDes是Des加密算法的增强版本,这里主要说的是TripleDes加密算法的应用. 工作中 ...
- Rsa加解密Java、C#、php通用代码 密钥转换工具
之前发了一篇"TripleDes的加解密Java.C#.php通用代码",后面又有项目用到了Rsa加解密,还是在不同系统之间进行交互,Rsa在不同语言的密钥格式不一样,所以过程中主 ...
- Des加解密(Java端和Js端配套)解析
一.什么是DES加密 des对称加密,对称加密,是一种比较传统的加密方式,其加密运算.解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码( ...
- 自己实现简单的RSA秘钥生成与加解密(Java )
最近在学习PKI,顺便接触了一些加密算法.对RSA着重研究了一下,自己也写了一个简单的实现RSA算法的Demo,包括公.私钥生成,加解密的实现.虽然比较简单,但是也大概囊括了RSA加解密的核心思想与流 ...
- SM2的非对称加解密java工具类
maven依赖 <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov- ...
- AES 加解密 Java实现
package com.smt.cipher.symmetry; import java.nio.charset.Charset; import java.security.SecureRandom; ...
- 加解密---Java安全
一.概述 1.JCA(Java Cryptography Architecture) 提供基本的加密框架(消息摘要.数字签名......) 2.JCE(Java Cryptography Extens ...
- Java 加解密 AES DES TripleDes
package xxx.common.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.crypt ...
- Java拓展教程:文件DES加解密
Java拓展教程:文件加解密 Java中的加密解密技术 加密技术根据一般可以分为对称加密技术和非对称加密技术.对称加密技术属于传统的加密技术,它的加密和解密的密钥是相同的,它的优点是:运算速度快,加密 ...
随机推荐
- 如果只有1小时学Python,看这篇就够了
大家好,我是大鹏,城市数据团联合发起人,致力于Python数据分析.数据可视化的应用与教学. 和很多同学接触过程中,我发现自学Python数据分析的一个难点是资料繁多,过于复杂.大部分网上的资料总是从 ...
- An incompatible version [1.2.10] of the APR based Apache Tomcat Native library is installed, while Tomcat requires version [1.2.14]
这个链接的博主写的很详细,直接推荐:https://blog.csdn.net/zhoukikoo/article/details/80532483
- Java--8--新特性--Lambda
java9 都出来了,我才开始接触到java8的新特性,有点脱节啊.. Lambda是一个匿名函数,可以理解为一段可以传递的代码,将代码像数据一样传递,下面是一个小例子. public class E ...
- 2-3 查找树及其Java实现
2-3 查找树 定义(来源:wiki) 查找 插入 2-3 查找树 定义(来源:wiki) 2–3树是一种树型数据结构,内部节点(存在子节点的节点)要么有2个孩子和1个数据元素,要么有3个孩子和2个数 ...
- 1122 django中orm操作
目录 1. 静态文件的配置 手动静态文件的访问资源 静态文件的动态绑定 2.request方法 2.1 请求方式 2.2 获取前端的请求方式 request.method 2.3 request方法 ...
- POJ2482 Stars in Your Window 和 test20180919 区间最大值
Stars in Your Window Language:Default Stars in Your Window Time Limit: 1000MS Memory Limit: 65536K T ...
- Jenkins 参数化构建(Extended Choice Parameter)
1.下载安装 Extended Choice Parameter 插件 2.打开job--->General--->参数化构建过程--->Extended Choice Parame ...
- 并发编程大师系列之:CountDownLatch和Join
业务场景描述:假设一条流水线上有三个工作者:worker1,worker2,worker3.有一个任务的完成需要他们三者协作完成,worker3可以开始这个任务的前提是worker1和worker2完 ...
- eclipse转到idea过程中的基本设置...
1.在写mapper.xml文件中有许多黄黄绿绿的警告 - 黄色的是没有用idea链接数据库,连上就ok,不连的话,这样:Prefernces ⇒ Editor ⇒ Inspections ⇒ SQL ...
- Vue中img的src属性绑定
正确:<img :src=" 'files/'+value.src "> 或 <img :src="value.src">错误:< ...