package com.itaoo.utils;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.*;
import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.CipherOutputStream;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
public class DESCoder {
// a weak key
private static String encoding = "UTF-8";
// 密钥
private String sKey = "";
public DESCoder(String sKey) {
this.sKey = sKey;
}
/**
* 加密字符串
*/
public String ebotongEncrypto(String str) {
String result = str;
if (str != null && str.length() > 0) {
try {
byte[] encodeByte = symmetricEncrypto(str.getBytes(encoding));
result = Base64.encode(encodeByte);
} catch (Exception e) {
e.printStackTrace();
}
}
return result;
}
/**
* 解密字符串
*/
public String ebotongDecrypto(String str) {
String result = str;
if (str != null && str.length() > 0) {
try {
byte[] encodeByte = Base64.decode(str);
byte[] decoder = symmetricDecrypto(encodeByte);
result = new String(decoder, encoding);
} catch (Exception e) {
e.printStackTrace();
}
}
return result;
}
/**
* 加密byte[]
*/
public byte[] ebotongEncrypto(byte[] str) {
byte[] result = null;
if (str != null && str.length > 0) {
try {
byte[] encodeByte = symmetricEncrypto(str);
result = Base64.encode(encodeByte).getBytes();
} catch (Exception e) {
e.printStackTrace();
}
}
return result;
}
/**
* 解密byte[]
*/
public byte[] ebotongDecrypto(byte[] str) {
byte[] result = null;
if (str != null && str.length > 0) {
try {
byte[] encodeByte = Base64.decode(new String(str, encoding));
//byte[] encodeByte = base64decoder.decodeBuffer(new String(str));
byte[] decoder = symmetricDecrypto(encodeByte);
result = new String(decoder).getBytes(encoding);
result = new String(decoder).getBytes();
} catch (Exception e) {
e.printStackTrace();
}
}
return result;
}
/**
* 对称加密字节数组并返回
*
* @param byteSource 需要加密的数据
* @return 经过加密的数据
* @throws Exception
*/
public byte[] symmetricEncrypto(byte[] byteSource) throws Exception {
try {
int mode = Cipher.ENCRYPT_MODE;
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
byte[] keyData = sKey.getBytes();
DESKeySpec keySpec = new DESKeySpec(keyData);
Key key = keyFactory.generateSecret(keySpec);
Cipher cipher = Cipher.getInstance("DES");
cipher.init(mode, key);
byte[] result = cipher.doFinal(byteSource);
return result;
} catch (Exception e) {
throw e;
} finally {
}
}
/**
* 对称解密字节数组并返回
*
* @param byteSource 需要解密的数据
* @return 经过解密的数据
* @throws Exception
*/
public byte[] symmetricDecrypto(byte[] byteSource) throws Exception {
try {
int mode = Cipher.DECRYPT_MODE;
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
byte[] keyData = sKey.getBytes();
DESKeySpec keySpec = new DESKeySpec(keyData);
Key key = keyFactory.generateSecret(keySpec);
Cipher cipher = Cipher.getInstance("DES");
cipher.init(mode, key);
byte[] result = cipher.doFinal(byteSource);
return result;
} catch (Exception e) {
throw e;
} finally {
}
}
/**
* 散列算法
*
* @param byteSource
* 需要散列计算的数据
* @return 经过散列计算的数据
* @throws Exception
*/
public static byte[] hashMethod(byte[] byteSource) throws Exception {
try {
MessageDigest currentAlgorithm = MessageDigest.getInstance("SHA-1");
currentAlgorithm.reset();
currentAlgorithm.update(byteSource);
return currentAlgorithm.digest();
} catch (Exception e) {
throw e;
}
}
/**
* 对文件srcFile进行加密输出到文件distFile
* @param srcFile 明文文件
* @param distFile 加密后的文件
* @throws Exception
*/
public void EncryptFile(String srcFile,String distFile) throws Exception{
InputStream is=null;
OutputStream out = null;
CipherInputStream cis =null;
try {
int mode = Cipher.ENCRYPT_MODE;
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
byte[] keyData = sKey.getBytes();
DESKeySpec keySpec = new DESKeySpec(keyData);
Key key = keyFactory.generateSecret(keySpec);
Cipher cipher = Cipher.getInstance("DES");
cipher.init(mode, key);
is= new FileInputStream(srcFile);
out = new FileOutputStream(distFile);
cis = new CipherInputStream(is,cipher);
byte[] buffer = new byte[1024];
int r;
while((r=cis.read(buffer))>0){
out.write(buffer, 0, r);
}
} catch (Exception e) {
throw e;
} finally {
cis.close();
is.close();
out.close();
}
}
/**
* 解密文件srcFile到目标文件distFile
* @param srcFile 密文文件
* @param distFile 解密后的文件
* @throws Exception
*/
public void DecryptFile(String srcFile,String distFile) throws Exception{
InputStream is=null;
OutputStream out = null;
CipherOutputStream cos =null;
try {
int mode = Cipher.DECRYPT_MODE;
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
byte[] keyData = sKey.getBytes();
DESKeySpec keySpec = new DESKeySpec(keyData);
Key key = keyFactory.generateSecret(keySpec);
Cipher cipher = Cipher.getInstance("DES");
cipher.init(mode, key);
byte[] buffer = new byte[1024];
is= new FileInputStream(srcFile);
out = new FileOutputStream(distFile);
cos = new CipherOutputStream(out,cipher);
int r;
while((r=is.read(buffer))>=0){
cos.write(buffer, 0, r);
}
} catch (Exception e) {
throw e;
} finally {
cos.close();
is.close();
out.close();
}
}
/**
* 对文件进行加密64位编码
* @param srcFile 源文件
* @param distFile 目标文件
*/
public void BASE64EncoderFile(String srcFile,String distFile){
InputStream inputStream =null;
OutputStream out = null;
try {
inputStream = new FileInputStream(srcFile);
out = new FileOutputStream(distFile);
byte[] buffer = new byte[1024];
while(inputStream.read(buffer)>0){
out.write(ebotongEncrypto(buffer));
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
out.close();
inputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* 对文件进行解密64位解码
* @param srcFile 源文件
* @param distFile 目标文件
*/
public void BASE64DecoderFile(String srcFile,String distFile){
InputStream inputStream =null;
OutputStream out = null;
try {
inputStream = new FileInputStream(srcFile);
out = new FileOutputStream(distFile);
byte[] buffer = new byte[1412];
while(inputStream.read(buffer)>0){
out.write(ebotongDecrypto(buffer));
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
out.close();
inputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
分享到:
相关推荐
DES加密解密算法的C语言实现 DES(Data Encryption Standard)是一种对称密钥 BLOCK 加密算法,使用 56 位密钥对 64 位数据块进行加密。下面是 DES 加密解密算法的 C 语言实现的知识点总结。 字节与二进制转换 在...
DES 算法加密算法解密算法 DES 算法概述 DES(Data Encryption Standard)是一种对称密钥块加密算法,由美国 IBM 公司的 W. Tuchman 和 C. Meyer 于 1971-1972 年研制成功。1973 年,美国国家标准局(NBS)公开...
这需要创建一个.NET类库项目,实现DES加密解密功能,然后在VBA中通过CreateObject或早绑定的方式调用这些函数。 以下是VB.NET中实现DES加密解密的简单示例代码: ```vbnet Imports System.IO Imports System....
本文将深入探讨如何使用MFC(Microsoft Foundation Classes)库实现DES(Data Encryption Standard)加密解密算法,以及如何支持文件的打开和保存操作。 DES是一种对称加密算法,由IBM在1970年代开发,并在1977年被...
这篇C语言源代码实现了DES加密解密算法,特别适合于资源有限的环境,如STM32或51单片机。STM32系列是基于ARM Cortex-M内核的微控制器,而51单片机则是早期广泛应用的8位微处理器。在这些平台上,由于内存(RAM)资源...
在`Android`平台上,你可以使用Java的`javax.crypto`库来实现`DES`加密解密。首先,需要创建一个`SecretKeySpec`对象,使用它和`DesKeySpec`对象初始化`KeyGenerator`,然后生成`SecretKey`。接着,使用`Cipher`对象...
在VC++环境中实现DES加密解密,你需要理解以下几个关键知识点: 1. **DES算法流程**:DES算法包括初始置换、16轮的Feistel函数和逆初始置换三个主要步骤。每轮Feistel函数中,又包含子密钥产生、异或操作、S盒替换...
在"DES文件加密解密算法实现"中,提到的CBC(Cipher Block Chaining)模式是一种常用的块加密模式。在CBC模式下,每个明文块都会与前一个密文块进行异或操作后再进行加密。这样做的目的是为了增加加密的复杂性和安全...
加密为直接输入十六进制的(消息,密钥,1);解密为(密文,密钥,2);Index=1为加密,不为1为解密
以下是关于3DES加密解密算法在Java中的实现细节: 首先,为了使用3DES,Java程序需要引入特定的JAR包,这些包通常位于`JAVA_HOME/jre/lib/`目录下,包括`jce.jar`、`US_export_policy.jar`、`local_policy.jar`以及...
在描述中提到的C++实现的DES加密解密算法,主要是针对TXT文本文件进行操作的。TXT文件是一种常见的文本格式,通常用于存储纯文本信息。DES算法在处理这种文件时,会将文件内容视为二进制数据流,然后按照64位的块...
标题中的“3DES加密解密工具”指的是一个用于执行三重数据加密标准(3DES,Triple DES)的软件工具,这种工具通常用于保护敏感数据的安全,确保信息在传输过程中的机密性。3DES是DES(Data Encryption Standard,...
在这个"DES.rar"压缩包中,包含了关于DES加密解密算法的学习资料,这可能包括源代码、教程或者示例项目,供用户了解和实践DES算法。"www.pudn.com.txt"可能是提供下载链接或者介绍的文本文件,而"DES"可能是一个包含...
DES,即Data Encryption Standard,是1970年代由IBM开发的一种对称密钥加密算法,后来被美国国家标准局...通过阅读和分析这个源代码,我们可以深入理解DES的工作机制,以及如何在实际项目中应用C语言实现加密解密功能。
在给定的“des加密例程”中,可能包含了一个调用动态链接库(DLL)实现DES加密解密的示例代码。DLL是Windows操作系统中的一种共享库,可以被多个程序同时调用,节省内存资源并便于代码复用。这个示例可能涉及以下...
下面将详细介绍DES加密解密算法及其在`DES.cpp`中的实现原理。 **DES算法概述:** 1. **初始置换(IP)**:原始的64位明文数据首先经过一个初始置换,将数据重新排列,增加破解难度。 2. **16轮迭代**:每轮包括...
DES算法是美国国家标准局(NBS)于1977年颁布的数据加密标准(FIPS),它使用56位的密钥对64位的明文进行加密和解密。 DES算法的加密过程可以分为以下几个步骤: 1.初始置换(IP):将64位的明文进行换位处理,...
DES 加密解密算法的 C 语言实现 本文档介绍了 DES 加密解密算法的 C 语言实现,提供了完整的源代码,能够加密字符串或者文件,已经通过测试使用。DES 加密算法是一种对称加密算法,既可用于加密又可用于解密。 一...
2024最新DES加密解密算法(简单、易懂、超级详细)2024最新DES加密解密算法(简单、易懂、超级详细)2024最新DES加密解密算法(简单、易懂、超级详细)2024最新DES加密解密算法(简单、易懂、超级详细)2024最新DES...
Android Des加密解密算法