C# And Java 3DES加解密 ECB模式/PKCS7
c#:
/// <summary>
/// 完整
/// </summary>
public class TripleDESHelper1
{
public static string Encrypt(string aStrString, string aStrKey, CipherMode mode = CipherMode.ECB, string iv = "12345678")
{
try
{
var des = new TripleDESCryptoServiceProvider
{
Key = Encoding.UTF8.GetBytes(aStrKey.Substring(0, 24)),//长度必须24个字节
Mode = mode
};
if (mode == CipherMode.ECB)
{
des.IV = Encoding.UTF8.GetBytes(iv);
}
var desEncrypt = des.CreateEncryptor();
byte[] buffer = Encoding.UTF8.GetBytes(aStrString);
return Convert.ToBase64String(desEncrypt.TransformFinalBlock(buffer, 0, buffer.Length));
}
catch (Exception e)
{
return string.Empty;
}
}
public static string Decrypt(string aStrString, string aStrKey, CipherMode mode = CipherMode.ECB, string iv = "12345678")
{
try
{
var des = new TripleDESCryptoServiceProvider
{
Key = Encoding.UTF8.GetBytes(aStrKey.Substring(0, 24)),//长度必须24个字节
Mode = mode,
Padding = PaddingMode.PKCS7
};
if (mode == CipherMode.CBC)
{
des.IV = Encoding.UTF8.GetBytes(iv);
}
var desDecrypt = des.CreateDecryptor();
var result = "";
byte[] buffer = Convert.FromBase64String(aStrString);
result = Encoding.UTF8.GetString(desDecrypt.TransformFinalBlock(buffer, 0, buffer.Length));
return result;
}
catch (Exception e)
{
return string.Empty;
}
}
}
public class TripleDESHelper
{
static byte[] IV = Encoding.UTF8.GetBytes("12345678");
public static string Encrypt(string content, string key)
{
try
{
var tDes = new TripleDESCryptoServiceProvider
{
Key = Encoding.UTF8.GetBytes(key.Substring(0, 24)),//长度必须24个字节
Mode = CipherMode.ECB,
IV = IV
};
var desEncrypt = tDes.CreateEncryptor();
byte[] buffer = Encoding.UTF8.GetBytes(content);
return Convert.ToBase64String(desEncrypt.TransformFinalBlock(buffer, 0, buffer.Length));
}
catch (Exception e)
{
return string.Empty;
}
}
public static string Decrypt(string content, string key)
{
try
{
var tDes = new TripleDESCryptoServiceProvider
{
Key = Encoding.UTF8.GetBytes(key.Substring(0, 24)),//长度必须24个字节
Mode = CipherMode.ECB,
Padding = PaddingMode.PKCS7
};
var desDecrypt = tDes.CreateDecryptor();
byte[] buffer = Convert.FromBase64String(content);
var result = Encoding.UTF8.GetString(desDecrypt.TransformFinalBlock(buffer, 0, buffer.Length));
return result;
}
catch (Exception e)
{
return string.Empty;
}
}
}
测试:
static void Main(string[] args)
{
//4C012206573169BF8E9F36BCF5D4125E //YFjDtE5ywAM=
string key = "4C012206573169BF8E9F36BC5D4125E";
string content = "123";
var val2 = TripleDESHelper.Encrypt(content, key);
var val3 = TripleDESHelper.Decrypt(val2, key);
Console.WriteLine("over");
Console.Read();
}
JAVA:
package com.yfpal.mpay.util;
import java.security.Key;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;
import org.apache.commons.codec.binary.Base64;
public class DesUtil {
/**
* 3DES加密
*
* @param data
* 数据
* @param key
* 密钥
* @return
*/
public static String encode(String data, String key) {
try {
DESedeKeySpec dks = new DESedeKeySpec(key.getBytes());
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
Key secretKey = keyFactory.generateSecret(dks);
Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, new SecureRandom());
return Base64.encodeBase64String(cipher.doFinal(data.getBytes("utf-8")));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
String minganKey = "OPJURIZFIWZWJIFDNXUXWSMFILOCLJQK";
System.out.println(minganKey);
System.out.println("dy9OMCtSK1ZoZ0FMUDZOWjUwQ2tlLzZvN2xKNVN4bFMwSFQ0YVY0QXBWUHAzYW84YjViWS9ydEY2U1JEUjlmV1hkcjhYMG1veGs3QXdzSmxHQ0QxNno3NXhha3hxdlkyN0U5U0EyQWxKNUk9".length());
String s=decode("dy9OMCtSK1ZoZ0FMUDZOWjUwQ2tlLzZvN2xKNVN4bFMwSFQ0YVY0QXBWUHAzYW84YjViWS9ydEY2U1JEUjlmV1hkcjhYMG1veGs3QXdzSmxHQ0QxNno3NXhha3hxdlkyN0U5U0EyQWxKNUk9", minganKey);
System.out.println(s);
}
/**
* 3DES解密
*
* @param key
* 密钥
* @param data
* 密文
* @return
*/
public static String decode(String data, String key) {
try {
Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
DESedeKeySpec dks = new DESedeKeySpec(key.getBytes());
SecretKey sk = SecretKeyFactory.getInstance("DESede").generateSecret(dks);
cipher.init(Cipher.DECRYPT_MODE, sk);
byte[] result = cipher.doFinal(Base64.decodeBase64(data));
return new String(result, "utf-8");
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static byte[] hexStringToByteArray(String text) {
if (text == null)
return null;
byte[] result = new byte[text.length() / 2];
for (int i = 0; i < result.length; ++i) {
int x = Integer.parseInt(text.substring(i * 2, i * 2 + 2), 16);
result[i] = x <= 127 ? (byte) x : (byte) (x - 256);
}
return result;
}
public static String byteArrayToHexString(byte data[]) {
String result = "";
for (int i = 0; i < data.length; i++) {
int v = data[i] & 0xFF;
String hv = Integer.toHexString(v);
if (hv.length() < 2) {
result += "0";
}
result += hv;
}
return result;
}
}
C# And Java 3DES加解密 ECB模式/PKCS7的更多相关文章
- java 与 c# 3des 加解密
java 与 c# 3des 加解密 主要差异如下: 1. 对于待加密解密的数据,各自的填充模式不一样 C#的模式有:ANSIX923.ISO10126.None.PKCS7.Zero,而Jav ...
- PHP版3DES加解密类
<?php /** * * PHP版3DES加解密类 * * 可与java的3DES(DESede)加密方式兼容 * * @Author:蓝凤(ilanfeng.com) * * @versio ...
- 3DES加解密【示例】
代码 /** * 3DES加解密 */ public class DESedeUtils { private static final String ALGORITHM_MD5 = &qu ...
- 3DES加解密类
using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace GT.C ...
- Java Des加解密方法(c#加密Java解密)
最近我们用Java把一个用.net编写的老系统重新做了翻版,但是登录还是用.net的登录.这样就会遇到一个比较棘手的问题,我们登录用的cookie信息都是.net用des加密的,但我们不得不用Java ...
- 3DES 加解密
using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Comm ...
- 3DES加解密 C语言
3DES(或称为Triple DES),它相当于是对每个数据块应用三次DES加密算法.3*8字节密钥. 设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明文,C代 ...
- javascript JS CryptoJS DES加解密CBC模式与C#DES加解密相同互通
我们只知道不同的语言解密要相互通用,就需要遵循相同的加密方式,然而在具体做技术预研的时候,就发现会遇到很多问题,网上找的资料也是比较片面,所以我踩了坑,并且把解决方案和相关资料源码提供出来,给需要的朋 ...
- 3Des加解密 C#--->Java
Java的Byte范围为-128至127,c#的Byte范围是0-255.核心是确定Mode和Padding,关于这两个的意思可以搜索3DES算法相关文章. C#采用CBC Mode,PKCS7 Pa ...
随机推荐
- I do think I can breakdown the problem into parts that make sense
RESTful Web APIs_2013 An API released today will be named after the company that hosts it. We talk a ...
- 关于ionic2 更新到ionic3 后组件不能用的解决方案
错误代码就不贴出来了,直接上代码吧! 首先在xx.module.ts添加 1.import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; 2.添加 ...
- go install and go captcha
https://blog.csdn.net/liuhongwei123888/article/details/8512815 [gocaptcha] http://www.cnblogs.co ...
- day0321 生成器
一.生成器 1.迭代器: 1.1.调用方法直接返回 1.2.可迭代对象通过执行iter方法得到 迭代器的优势:节省内存. 2.生成器:有些情况我们也需要也需要节省空间,只能是自己写来实现迭代器的功能就 ...
- [knowledge] 停止等待协议
再读TCP/IP详解 说到流量控制, 可能便涉及了两方面 1. 停止等待协议. https://baike.baidu.com/item/%E5%81%9C%E6%AD%A2%E7%AD%89%E5% ...
- 第一版STM32PCB的问题
1.5与6引脚连在一起了 2.有3个插排隔得太近,导致传感器安装不了 3.开关不匹配,画PCB时可以考虑一下实验室有哪些东西 4.可以用开关代替跳冒 5.AM3.3电路电容 6.钽电容的正负极区分 有 ...
- JTAG 工作原理
- 页面调用qq
tencent://message/?uin=516999605&Site=&Menu=yes
- 如何暂停和继续运行Linux程序
我们通过shell窗口运行程序时,由于有的程序长时间运行,直到下班了都还没有返回运行结果.这个时候,我们又不能直接关闭shell窗口,不然前面的时间就白白运行了. 那有什么办法可以先暂停程序,明天再继 ...
- MySQL常用SQL语句优化
推荐阅读这篇博文,索引说的非常详细到位:http://blog.linezing.com/?p=798#nav-3-2 在数据库日常维护中,最常做的事情就是SQL语句优化,因为这个才是影响性能的最主要 ...