TripleDES对称加密解密 -[C#-JAVA]
C#代码段
先MD5 再TripleDES加密
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using System.Security.Cryptography;
using System.IO;
namespace WebApplication1
{
public class Class1
{
public static byte[] CRYPTO_KEY = new byte[] { 0x61, 0x75, 0x74, 0x6F, 0x68, 0x6F, 0x6D, 0x65, 0x63, 0x6F, 0x6F, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x6F, 0x70, 0x65, 0x6E, 0x61, 0x70, 0x69 };
public static byte[] CRYPTO_IV = new byte[] { 0x12, 0x34, 0x56, 0x78, (byte)0x90, (byte)0xAB, (byte)0xCD, (byte)0xEF };
public static String Md5(string str)
{
if (string.IsNullOrWhiteSpace(str)) return str;
StringBuilder sb = new StringBuilder();
MD5 md5 = new MD5CryptoServiceProvider();
byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(str));
md5.Clear();
for (int i = 0; i < s.Length; i++)
{
sb.Append(s[i].ToString("x2"));
}
return sb.ToString();
}
//对称加密 并转base64 方法1
public static string TripleDesEncrypt(string str)
{
SymmetricAlgorithm csp = new TripleDESCryptoServiceProvider();
csp.Key = CRYPTO_KEY;
csp.IV = CRYPTO_IV;
csp.Padding = PaddingMode.PKCS7;
ICryptoTransform ct = csp.CreateEncryptor();
byte[] buffer = Encoding.UTF8.GetBytes(str);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
cs.Write(buffer, 0, buffer.Length);
cs.FlushFinalBlock();
cs.Close();
csp.Clear();
return Convert.ToBase64String(ms.ToArray());
}
//对称加密,并转base64 方法2
public static string encryptToBase64(string plainText)
{
try
{
// Create a MemoryStream.
MemoryStream mStream = new MemoryStream();
TripleDESCryptoServiceProvider tripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider();
tripleDESCryptoServiceProvider.Key = CRYPTO_KEY;
tripleDESCryptoServiceProvider.IV = CRYPTO_IV;
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;
}
}
}
}
Java 代码片段
package com.ittx.edi.erp.service;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;
import javax.crypto.spec.IvParameterSpec;
import java.security.MessageDigest;
import java.security.spec.AlgorithmParameterSpec;
public class TripleDesEncrypt {
//密钥公共参数
private final byte[] DESkey = {0x61, 0x75, 0x74, 0x6F, 0x68, 0x6F, 0x6D, 0x65, 0x63, 0x6F, 0x6F, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x6F, 0x70, 0x65, 0x6E, 0x61, 0x70, 0x69};
private final byte[] DESIV = {0x12, 0x34, 0x56, 0x78, (byte) 0x90, (byte) 0xAB, (byte) 0xCD, (byte) 0xEF};// 设置向量,略去
//加密Key/value
private AlgorithmParameterSpec iv = null;// 加密算法的参数接口,IvParameterSpec是它的一个实现
private SecretKey key = null;
/**
* MD5加密串
*转16进制小写 方法1
* @param s
* @return
*/
public String MD5(String s) {
char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
try {
//StringBuilder sb = new StringBuilder();
byte[] btInput = s.getBytes();
// 获得MD5摘要算法的 MessageDigest 对象
MessageDigest mdInst = MessageDigest.getInstance("MD5");
// 使用指定的字节更新摘要
mdInst.update(btInput);
// 获得密文
byte[] md = mdInst.digest();
// 把密文转换成十六进制的字符串形式
int j = md.length;
char str[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++) {
byte byte0 = md[i];
str[k++] = hexDigits[byte0 >> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
return new String(str).toLowerCase();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* MD5加密转小写16进制 方法2
* @param str
* @param encoding
* @return
*/
static String md5ToHex16(String str,String encoding){
new BigInteger(1, md5Encrypt(str,encoding)).toString(16)
}
static byte[] md5Encrypt(String str,String encoding) {
try {
MessageDigest md5 = MessageDigest.getInstance("MD5")
md5.reset()
md5.update(str.getBytes(encoding))
md5.digest()
} catch (Exception ex) {
ex.printStackTrace()
null
}
}
/**
* 获取密钥参数
*
* @throws Exception
*/
public TripleDesEncrypt() throws Exception {
DESedeKeySpec keySpec = new DESedeKeySpec(DESkey);// 设置密钥参数
iv = new IvParameterSpec(DESIV);// 设置向量
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");// 获得密钥工厂
key = keyFactory.generateSecret(keySpec);// 得到密钥对象
}
/**
* 加密方法
*
* @param data
* @return
* @throws Exception
*/
public String encode(String data) throws Exception {
Cipher enCipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");// 得到加密对象Cipher
enCipher.init(Cipher.ENCRYPT_MODE, key, iv);// 设置工作模式为加密模式,给出密钥和向量
byte[] pasByte = enCipher.doFinal(data.getBytes("utf-8"));
BASE64Encoder base64Encoder = new BASE64Encoder();
return base64Encoder.encode(pasByte);
}
/**
* 解密方法
*
* @param data
* @return
* @throws Exception
*/
public String decode(String data) throws Exception {
Cipher deCipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
deCipher.init(Cipher.DECRYPT_MODE, key, iv);
BASE64Decoder base64Decoder = new BASE64Decoder();
byte[] pasByte = deCipher.doFinal(base64Decoder.decodeBuffer(data));
return new String(pasByte, "UTF-8");
}
// public static void main(String[] args) {
// try {
// String test = "7c9c9ebdc2a0a323cbc0f4d23605fde7";
// TripleDesEncrypt des = new TripleDesEncrypt();//自定义密钥
// String s = des.MD5("[{\"json\":\"123\"}]_20200106_012345678901234567890123");
// String ss = s.toLowerCase();
// System.out.println(ss);
// System.out.println("加密前的字符:"+ss);
// System.out.println("加密后的字符:"+des.encode(ss));
// System.out.println("解密后的字符:"+des.decode(des.encode(ss)));
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
}
转载另外一位博友的总结:
https://www.cnblogs.com/jaamy/p/6118622.html
TripleDES对称加密解密 -[C#-JAVA]的更多相关文章
- AES对称加密解密类
import java.io.UnsupportedEncodingException; import javax.crypto.Cipher; import javax.crypto.spec.Se ...
- DESEncrypt对称加密解密
分享一个很好用的DESEncrypt对称加密解密的类 using System; using System.Security.Cryptography; using System.Text; usin ...
- 使用java实现对称加密解密(AES),非对称加密解密(RSA)
对称加密:双方采用同样的秘钥进行加密和解密.特点是速度快,但是安全性没有非对称加密高 非对称加密:接收方生成的公有秘钥公布给发送方,发送方使用该公有秘钥加密之后,发送给接收方,然后接收方使用私有秘钥解 ...
- pyDes 实现 Python 版的 DES 对称加密/解密--转
https://my.oschina.net/leejun2005/blog/586451 手头有个 Java 版的 DES 加密/解密程序,最近想着将其 Python 重构下,方便后续脚本解析,捣鼓 ...
- python AES 双向对称加密解密
高级加密标准(Advanced Encryption Standard,AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分 ...
- AES加密解密算法---java
package com.BFGJ.AES; import java.util.Random; import java.util.StringTokenizer; import javax.crypto ...
- 使用Aes对称加密解密Web.Config数据库连接串
现在很多公司开始为了保证数据库的安全性,通常会对Web.Config的数据库连接字符串进行加密.本文将介绍学习使用Aes加密解密数据库连接字符串.本文采用MySql数据库. AES概念简述 AES 是 ...
- 凯撒加密解密(java字母移位)
1.设计思想:加密就是将字符数据转化为ASC码表中的数字,a—w之间通过加3之后再转化为字符型输出,x—z之间通过转化为ASC码表中的数字后减去23再转化为字符型输出.解密就是将字符数据转化为ASC码 ...
- Des加密解密算法java实现
package tech.fullink.eaglehorn.utils; import javax.crypto.Cipher; import javax.crypto.SecretKey; imp ...
随机推荐
- windows server 2016 安装有线网卡驱动
为自己的本本安装了server 2016系统,但是官网下载的有线网卡驱动一直安不上,解决方法如下: 1.到Intel官网下载一个叫PROWinx64的驱动程序,解压到任意文件夹.依次进入PRO1000 ...
- 【.NET 与树莓派】PWM 调节LED小灯的亮度
在开始本文内容之前,老周先纠正一个错误.在上一篇中,提到过 Arduino 开发板的 Vin 引脚,文中老周说这个供电口的输入电压不能高于 5.5V.这里有错,被卖家给的使用说明忽悠了,上 Ardui ...
- K8S(04)核心插件-coredns服务
K8S核心插件-coredns服务 目录 K8S核心插件-coredns服务 1 coredns用途 1.1 为什么需要服务发现 2 coredns的部署 2.1 获取coredns的docker镜像 ...
- 1009E Intercity Travelling 【数学期望】
题目:戳这里 题意:从0走到n,难度分别为a1~an,可以在任何地方休息,每次休息难度将重置为a1开始.求总难度的数学期望. 解题思路: 跟这题很像,利用期望的可加性,我们分析每个位置的状态,不管怎么 ...
- IFIX 5.9 历史数据 曲线 (非SQL模式)
装完 ifix 5.9 默认是没有Hist 开头的 历史数据源的,没存,至少我装的版本是这样. 那个Historian 也没有安装包,好像还要授权,自己研究不了. 1 先把数据存本地 在你的安装包里 ...
- 2019牛客多校第一场I Points Division(DP)题解
题意: n个点,分成两组A,B,如果点i在A中,那么贡献值\(a_i\),反之为\(b_i\). 现要求任意\(i \in A,j \in B\)不存在 \(x_i >= x_j\) 且 \(y ...
- Linux内核实现透视---软中断&Tasklet
软中断 首先明确一个概念软中断(不是软件中断int n).总来来说软中断就是内核在启动时为每一个内核创建了一个特殊的进程,这个进程会不停的poll检查是否有软中断需要执行,如果需要执行则调用注册的接口 ...
- 网易吃鸡 mac 版,没有声音
网易吃鸡 mac 版,没有声音 bug 声音太小了 客服电话 问题反馈 提交工单 https://gm.163.com/user_help.html?index=5&stypeid=3619 ...
- VSCode & SQL
VSCode & SQL MySQL MySQL https://marketplace.visualstudio.com/items?itemName=formulahendry.vscod ...
- Python 2 to Python 3 convert
Python 2 to Python 3 convert 2to3, 自动将 Python 2 代码转为 Python 3 代码 https://docs.python.org/zh-cn/2/lib ...