des加解密 JAVA加密 C++解密
那位仁兄有弄过des加解密?就是想用JAVA加密C++解密最好含有有base64Emial:yige388@126.comQQ:413425430最好含有key注意了能实...
那位仁兄有弄过des加解密?
就是想用JAVA加密 C++解密 最好含有有base64
Emial:yige388@126.com
QQ:413425430
最好含有key
注意了能实现java与C++互用加解密 展开
就是想用JAVA加密 C++解密 最好含有有base64
Emial:yige388@126.com
QQ:413425430
最好含有key
注意了能实现java与C++互用加解密 展开
1个回答
展开全部
做过 。。
快忘了 明天再告诉你
为甚非要要 C++ 解密呢? Java 加解密的有
以前帮老师做过,不过是老师提供了一个 .DLL 加密接口,我用java调用它加密,然后再用java 解密,也就是说没有 C++ 加密实现代码。。。。
至于 C++ 解密,由于 DES 加解密不依赖具体实现,也就是说不管是java 还是 C++ 加密后的密文都应该是一样的,你另外再问一个题目求C++大虾们贴一个C++版本的解密程序应该不难的,反正也有的是分。。。
先给你一个 Java 版本的加解密实现吧,代码全部来自于网络,现在整理了一下现在归还网络,就不单独发给你了:
使用方法:
try{
DESCipher cipher= new DESCipher("password".getBytes());
cipher.doDecrypt(cipher.doEncrypt("PlainText".getBytes()));
}catch(Exceptione E){}
/**<p>
* =============================================================================
* <p> Copyright (c) 2008,Ren Java Studio
* <p> All rights reserved.<p>
* =============================================================================
* <p> 文件名称:DESCipher.java
* <p> 文件标识:见配置管理计划书
* <p> 摘 要:DES 数据加密程序
* <p> 较前一个版本增加了文件加密流技术和3重DES加密技术
* <p> 当前版本:3.0
* <p> 作 者:Ren
* <p> 完成日期:2008年5月13日
*
* <p> 取代版本:2.0
* <p> 作 者:Ren
* <p> 完成日期:2007.4.29.<p>
=============================================================================*/
package common.ciphers.symmetry;
public class DESCipher
extends SymmetryCipher
{
/**<p>
* =========================================================================
* <p> 默认构造器: 使用默认随机密钥
* @exception Exception 如果系统没有安装此类密码机.<p>
=========================================================================*/
public DESCipher()
throws Exception
{
super( null, "DES" );
}
/**<p>
* =========================================================================
*<p> 用指定密钥构造DES密钥
* @param pwd 指定 DES 密码
* @exception Exception 如果系统没有安装此类密码机.<p>
=========================================================================*/
public DESCipher( byte[] pwd )
throws Exception
{
super( pwd, "DES" );
}
/**<p>
* =========================================================================
* <p> 本DES密码机的算法描述
* @return String 本 DES 密码机的算法描述.<p>
=========================================================================*/
public String toString()
{
return "DES 密码机 Verison 3.0 Made By Ren"
+ super.toString();
}
}
package common.ciphers.symmetry;
import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
/**<p>
* =============================================================================
* <p> Copyright (c) 2008,Ren Java Studio
* <p> All rights reserved.<p>
* =============================================================================
* <p> 文件名称:SymmetryCipher.java
* <p> 文件标识:见配置管理计划书
* <p> 摘 要:对称密码机之底层超类
* <p> 当前版本:1.0
* <p> 作 者:Ren
* <p> 完成日期:2008年5月18日.<p>
=============================================================================*/
public class SymmetryCipher {
/** 本密码机实现的算法 */
protected final String algorithm;
/** 客户指定的用于加解密的密码 */
private byte[] password = null;
/** 根据指定密码生成的秘密密钥 */
private SecretKey secretKey = null;
/** 系统的密码机 */
private Cipher cipher = null;
/**<p>
* =========================================================================
* <p> 构造函数: 指定本密码机的实现的算法和加解密密码
* @param pwd byte[] 客户指定的用于加解密的密码
* @param algorithm String 本密码机实现的算法
* @throws Exception 如果没有此算法的实现.<p>
=========================================================================*/
protected SymmetryCipher(byte[] pwd, String algorithm) throws Exception {
//使用SUN公司提供的密码机
java.security.Security.addProvider(new com.sun.crypto.provider.SunJCE());
this.algorithm = algorithm;
initKey(pwd);
cipher = Cipher.getInstance(algorithm);
}
/**<p>
* =========================================================================
* <p> 根据客户提供的密码初始化本密码机的密钥信息
* @param pwd byte[] 客户指定的密码
* @throws Exception 如果没有此算法的实现.<p>
=========================================================================*/
private void initKey(byte[] pwd) throws Exception {
if (pwd != null) {
password = pwd;
secretKey = this.usePwdGenSecretKey(password);
} else {
//客户没有指定密码时,那么系统生成一个随机密码
password = this.genRandomSecretKey().getEncoded();
secretKey = this.usePwdGenSecretKey(password);
}
}
/**<p>
* =========================================================================
* <p> 用本密码机的秘密密钥加密指定的明文信息
* @param plainInfo byte[] 要求加密的明文信息
* @return byte[] 加密后的信息
* @throws Exception 加密过程出现错误.<p>
=========================================================================*/
public byte[] doEncrypt(byte[] plainInfo) throws Exception {
cipher.init(Cipher.ENCRYPT_MODE, this.secretKey);
return cipher.doFinal(plainInfo);
}
/*<p>
* =========================================================================
* <p> 用指定 密码 加密指定明文信息
* @param desKey DES 密码
* @param plainInfo 要求加密的明文信息
* @return byte[] 用指定密码加密明文后的信息
* @exception java.lang.Exception 如果系统没有安装此类密码机.<p>
=========================================================================*/
public byte[] doEncrypt(byte[] plainInfo, byte[] pwd) throws Exception {
cipher.init(Cipher.ENCRYPT_MODE, this.usePwdGenSecretKey(pwd));
return cipher.doFinal(plainInfo);
}
/**<p>
* =========================================================================
* <p> 用本密码机的密码解密指定的密文信息
* @param encryptedInfo byte[] 加过密的密文信息
* @return byte[] 解密结果
* @throws Exception 解密过程出现错误.<p>
=========================================================================*/
public byte[] doDecrypt(byte[] encryptedInfo) throws Exception {
cipher.init(Cipher.DECRYPT_MODE, this.secretKey);
return cipher.doFinal(encryptedInfo);
}
/*<p>
* =========================================================================
* <p> 用指定密钥加密指定解密密文内容
* @param desKey DES 密钥
* @param encryptText DES 密文
* @param byte[] 用指定密钥解密DES密文后的信息
* @exception java.lang.Exception 如果系统没有安装此类密码机.<p>
=========================================================================*/
public byte[] doDecrypt(byte[] encryptedInfo, byte[] pwd) throws Exception {
cipher.init(Cipher.DECRYPT_MODE, this.usePwdGenSecretKey(pwd));
return cipher.doFinal(encryptedInfo);
}
/**<p>
* =========================================================================
* <p> 根据本密码机的算法生成一个随机密钥
* @return SecretKey 生成的随机密钥
* @throws Exception 如果系统没有此算法的实现.<p>
=========================================================================*/
public final SecretKey genRandomSecretKey() throws Exception {
return genRandomSecretKey(this.algorithm);
}
/**<p>
* =========================================================================
* <p> 根据指定的算法生成一把随机密钥
* @param algorithm String 客户指定的算法
* @return SecretKey 生成的随机密钥
* @throws Exception 如果系统没有此算法的实现.<p>
=========================================================================*/
public final static SecretKey genRandomSecretKey(String algorithm) throws
Exception {
KeyGenerator keygen = KeyGenerator.getInstance(algorithm);
SecureRandom random = new SecureRandom();
keygen.init(random);
return keygen.generateKey();
}
/**<p>
* =========================================================================
* <p> 用客户自己定义的 密码 根据本密码机的算法生成一个密钥信息
* @param pwd byte[] 密码信息
* @return SecretKey 根据密码生成的密钥信息.<p>
* @exception Exception 如果系统没有安装此算法的实现.<p>
=========================================================================*/
public SecretKey usePwdGenSecretKey(byte[] pwd) throws Exception {
return usePwdGenSecretKey(pwd, this.algorithm);
}
/**<p>
* =========================================================================
* <p> 用客户自己定义的 密码 和客户定义的算法生成一个密钥信息
* @param pwd byte[] 客户的密码
* @param algorithm String 算法名
* @return SecretKey 生成的秘密密钥
* @throws Exception 如果系统没有安装此算法的实现.<p>
=========================================================================*/
public final static SecretKey usePwdGenSecretKey(byte[] pwd,
String algorithm) throws Exception {
SecureRandom random = new SecureRandom(pwd);
KeyGenerator keygen = KeyGenerator.getInstance(algorithm);
keygen.init(random);
return keygen.generateKey();
}
/**<p>
* =========================================================================
* <p> 以指定 密钥 字节信息生成一个本密码机指定的算法的秘密密钥
* @param rawKeys byte[] 密钥字节信息
* @return SecretKey 生成的密钥信息
* @throws Exception 如果指定密钥不符合此算法规定的密钥规范.<p>
=========================================================================*/
public final SecretKey useKeyGenecretKey(byte[] rawKeys) throws Exception {
return useKeyGenSecretKey(rawKeys, this.algorithm);
}
/**<p>
* =========================================================================
* <p> 以指定 密钥 字节信息生成一个秘密密钥
* @param rawKeys byte[] 密钥字节信息
* @param algorithm 指定的算法
* @return SecretKey 生成的密钥信息
* @throws Exception 如果指定密钥不符合此算法规定的密钥规范.<p>
=========================================================================*/
public final static SecretKey useKeyGenSecretKey(byte[] rawKeys,
String algorithm) throws Exception {
return SecretKeyFactory.getInstance(algorithm)
.generateSecret(new SecretKeySpec(rawKeys, algorithm));
}
/**<p>
* =========================================================================
* <p> 设置本密码机的密码,同时也会重新初始化密钥信息
* @param pwd byte[] 客户指定的密码
* @throws Exception 密码设置失败.<p>
=========================================================================*/
public void setPassword(byte[] pwd) throws Exception {
initKey(pwd);
}
/**<p>
* =========================================================================
* <p> 用指定的密码字节信息生成本密码机的秘密密钥
* @param pwdKey byte[] 客户指定的密码信息
* @throws Exception 如果本密码机未指定算法.<p>
=========================================================================*/
public void setSecretKeyAsBytes(byte[] pwdKey) throws Exception {
this.setSecretKeyAsObj(this.usePwdGenSecretKey(pwdKey));
}
/**<p>
* =========================================================================
* <p> 用秘密密钥指定本密码机的秘密密钥,对应的密码设置为空
* @param sk SecretKey 客户指定的秘密密钥.<p>
=========================================================================*/
public void setSecretKeyAsObj(SecretKey sk) {
this.secretKey = sk;
password = null; //密码复位,知道密钥不能推知初始密码;
}
/**<p>
* =========================================================================
* <p> 获取秘密密钥信息
* @return SecretKey 秘密密钥.<p>
=========================================================================*/
public SecretKey getSecretKeyAsObj() {
return secretKey;
}
/**<p>
* =========================================================================
* <p> 获取当前密钥的字节信息
* @return byte[] 密钥字节信息.<p>
=========================================================================*/
public byte[] getSecretKeyAsBytes() {
if (secretKey != null) {
return secretKey.getEncoded();
}
return null;
}
/**<p>
* =========================================================================
* <p> 获取本密码机的算法
* @return String 本密码机的算法.<p>
=========================================================================*/
public String getAlgorithm() {
return this.algorithm;
}
/**<p>
* =========================================================================
* <p> 获取客户指定的密码
* @return byte[] 客户指定的密码.<p>
=========================================================================*/
public byte[] getPassword() {
return password;
}
/**<p>
* =========================================================================
* <p> 获取本密码机的算法描述
* @return String 本密码机的算法描述.<p>
=========================================================================*/
public String toString() {
return "本对称密码机实现之算法: " + this.algorithm;
}
}
快忘了 明天再告诉你
为甚非要要 C++ 解密呢? Java 加解密的有
以前帮老师做过,不过是老师提供了一个 .DLL 加密接口,我用java调用它加密,然后再用java 解密,也就是说没有 C++ 加密实现代码。。。。
至于 C++ 解密,由于 DES 加解密不依赖具体实现,也就是说不管是java 还是 C++ 加密后的密文都应该是一样的,你另外再问一个题目求C++大虾们贴一个C++版本的解密程序应该不难的,反正也有的是分。。。
先给你一个 Java 版本的加解密实现吧,代码全部来自于网络,现在整理了一下现在归还网络,就不单独发给你了:
使用方法:
try{
DESCipher cipher= new DESCipher("password".getBytes());
cipher.doDecrypt(cipher.doEncrypt("PlainText".getBytes()));
}catch(Exceptione E){}
/**<p>
* =============================================================================
* <p> Copyright (c) 2008,Ren Java Studio
* <p> All rights reserved.<p>
* =============================================================================
* <p> 文件名称:DESCipher.java
* <p> 文件标识:见配置管理计划书
* <p> 摘 要:DES 数据加密程序
* <p> 较前一个版本增加了文件加密流技术和3重DES加密技术
* <p> 当前版本:3.0
* <p> 作 者:Ren
* <p> 完成日期:2008年5月13日
*
* <p> 取代版本:2.0
* <p> 作 者:Ren
* <p> 完成日期:2007.4.29.<p>
=============================================================================*/
package common.ciphers.symmetry;
public class DESCipher
extends SymmetryCipher
{
/**<p>
* =========================================================================
* <p> 默认构造器: 使用默认随机密钥
* @exception Exception 如果系统没有安装此类密码机.<p>
=========================================================================*/
public DESCipher()
throws Exception
{
super( null, "DES" );
}
/**<p>
* =========================================================================
*<p> 用指定密钥构造DES密钥
* @param pwd 指定 DES 密码
* @exception Exception 如果系统没有安装此类密码机.<p>
=========================================================================*/
public DESCipher( byte[] pwd )
throws Exception
{
super( pwd, "DES" );
}
/**<p>
* =========================================================================
* <p> 本DES密码机的算法描述
* @return String 本 DES 密码机的算法描述.<p>
=========================================================================*/
public String toString()
{
return "DES 密码机 Verison 3.0 Made By Ren"
+ super.toString();
}
}
package common.ciphers.symmetry;
import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
/**<p>
* =============================================================================
* <p> Copyright (c) 2008,Ren Java Studio
* <p> All rights reserved.<p>
* =============================================================================
* <p> 文件名称:SymmetryCipher.java
* <p> 文件标识:见配置管理计划书
* <p> 摘 要:对称密码机之底层超类
* <p> 当前版本:1.0
* <p> 作 者:Ren
* <p> 完成日期:2008年5月18日.<p>
=============================================================================*/
public class SymmetryCipher {
/** 本密码机实现的算法 */
protected final String algorithm;
/** 客户指定的用于加解密的密码 */
private byte[] password = null;
/** 根据指定密码生成的秘密密钥 */
private SecretKey secretKey = null;
/** 系统的密码机 */
private Cipher cipher = null;
/**<p>
* =========================================================================
* <p> 构造函数: 指定本密码机的实现的算法和加解密密码
* @param pwd byte[] 客户指定的用于加解密的密码
* @param algorithm String 本密码机实现的算法
* @throws Exception 如果没有此算法的实现.<p>
=========================================================================*/
protected SymmetryCipher(byte[] pwd, String algorithm) throws Exception {
//使用SUN公司提供的密码机
java.security.Security.addProvider(new com.sun.crypto.provider.SunJCE());
this.algorithm = algorithm;
initKey(pwd);
cipher = Cipher.getInstance(algorithm);
}
/**<p>
* =========================================================================
* <p> 根据客户提供的密码初始化本密码机的密钥信息
* @param pwd byte[] 客户指定的密码
* @throws Exception 如果没有此算法的实现.<p>
=========================================================================*/
private void initKey(byte[] pwd) throws Exception {
if (pwd != null) {
password = pwd;
secretKey = this.usePwdGenSecretKey(password);
} else {
//客户没有指定密码时,那么系统生成一个随机密码
password = this.genRandomSecretKey().getEncoded();
secretKey = this.usePwdGenSecretKey(password);
}
}
/**<p>
* =========================================================================
* <p> 用本密码机的秘密密钥加密指定的明文信息
* @param plainInfo byte[] 要求加密的明文信息
* @return byte[] 加密后的信息
* @throws Exception 加密过程出现错误.<p>
=========================================================================*/
public byte[] doEncrypt(byte[] plainInfo) throws Exception {
cipher.init(Cipher.ENCRYPT_MODE, this.secretKey);
return cipher.doFinal(plainInfo);
}
/*<p>
* =========================================================================
* <p> 用指定 密码 加密指定明文信息
* @param desKey DES 密码
* @param plainInfo 要求加密的明文信息
* @return byte[] 用指定密码加密明文后的信息
* @exception java.lang.Exception 如果系统没有安装此类密码机.<p>
=========================================================================*/
public byte[] doEncrypt(byte[] plainInfo, byte[] pwd) throws Exception {
cipher.init(Cipher.ENCRYPT_MODE, this.usePwdGenSecretKey(pwd));
return cipher.doFinal(plainInfo);
}
/**<p>
* =========================================================================
* <p> 用本密码机的密码解密指定的密文信息
* @param encryptedInfo byte[] 加过密的密文信息
* @return byte[] 解密结果
* @throws Exception 解密过程出现错误.<p>
=========================================================================*/
public byte[] doDecrypt(byte[] encryptedInfo) throws Exception {
cipher.init(Cipher.DECRYPT_MODE, this.secretKey);
return cipher.doFinal(encryptedInfo);
}
/*<p>
* =========================================================================
* <p> 用指定密钥加密指定解密密文内容
* @param desKey DES 密钥
* @param encryptText DES 密文
* @param byte[] 用指定密钥解密DES密文后的信息
* @exception java.lang.Exception 如果系统没有安装此类密码机.<p>
=========================================================================*/
public byte[] doDecrypt(byte[] encryptedInfo, byte[] pwd) throws Exception {
cipher.init(Cipher.DECRYPT_MODE, this.usePwdGenSecretKey(pwd));
return cipher.doFinal(encryptedInfo);
}
/**<p>
* =========================================================================
* <p> 根据本密码机的算法生成一个随机密钥
* @return SecretKey 生成的随机密钥
* @throws Exception 如果系统没有此算法的实现.<p>
=========================================================================*/
public final SecretKey genRandomSecretKey() throws Exception {
return genRandomSecretKey(this.algorithm);
}
/**<p>
* =========================================================================
* <p> 根据指定的算法生成一把随机密钥
* @param algorithm String 客户指定的算法
* @return SecretKey 生成的随机密钥
* @throws Exception 如果系统没有此算法的实现.<p>
=========================================================================*/
public final static SecretKey genRandomSecretKey(String algorithm) throws
Exception {
KeyGenerator keygen = KeyGenerator.getInstance(algorithm);
SecureRandom random = new SecureRandom();
keygen.init(random);
return keygen.generateKey();
}
/**<p>
* =========================================================================
* <p> 用客户自己定义的 密码 根据本密码机的算法生成一个密钥信息
* @param pwd byte[] 密码信息
* @return SecretKey 根据密码生成的密钥信息.<p>
* @exception Exception 如果系统没有安装此算法的实现.<p>
=========================================================================*/
public SecretKey usePwdGenSecretKey(byte[] pwd) throws Exception {
return usePwdGenSecretKey(pwd, this.algorithm);
}
/**<p>
* =========================================================================
* <p> 用客户自己定义的 密码 和客户定义的算法生成一个密钥信息
* @param pwd byte[] 客户的密码
* @param algorithm String 算法名
* @return SecretKey 生成的秘密密钥
* @throws Exception 如果系统没有安装此算法的实现.<p>
=========================================================================*/
public final static SecretKey usePwdGenSecretKey(byte[] pwd,
String algorithm) throws Exception {
SecureRandom random = new SecureRandom(pwd);
KeyGenerator keygen = KeyGenerator.getInstance(algorithm);
keygen.init(random);
return keygen.generateKey();
}
/**<p>
* =========================================================================
* <p> 以指定 密钥 字节信息生成一个本密码机指定的算法的秘密密钥
* @param rawKeys byte[] 密钥字节信息
* @return SecretKey 生成的密钥信息
* @throws Exception 如果指定密钥不符合此算法规定的密钥规范.<p>
=========================================================================*/
public final SecretKey useKeyGenecretKey(byte[] rawKeys) throws Exception {
return useKeyGenSecretKey(rawKeys, this.algorithm);
}
/**<p>
* =========================================================================
* <p> 以指定 密钥 字节信息生成一个秘密密钥
* @param rawKeys byte[] 密钥字节信息
* @param algorithm 指定的算法
* @return SecretKey 生成的密钥信息
* @throws Exception 如果指定密钥不符合此算法规定的密钥规范.<p>
=========================================================================*/
public final static SecretKey useKeyGenSecretKey(byte[] rawKeys,
String algorithm) throws Exception {
return SecretKeyFactory.getInstance(algorithm)
.generateSecret(new SecretKeySpec(rawKeys, algorithm));
}
/**<p>
* =========================================================================
* <p> 设置本密码机的密码,同时也会重新初始化密钥信息
* @param pwd byte[] 客户指定的密码
* @throws Exception 密码设置失败.<p>
=========================================================================*/
public void setPassword(byte[] pwd) throws Exception {
initKey(pwd);
}
/**<p>
* =========================================================================
* <p> 用指定的密码字节信息生成本密码机的秘密密钥
* @param pwdKey byte[] 客户指定的密码信息
* @throws Exception 如果本密码机未指定算法.<p>
=========================================================================*/
public void setSecretKeyAsBytes(byte[] pwdKey) throws Exception {
this.setSecretKeyAsObj(this.usePwdGenSecretKey(pwdKey));
}
/**<p>
* =========================================================================
* <p> 用秘密密钥指定本密码机的秘密密钥,对应的密码设置为空
* @param sk SecretKey 客户指定的秘密密钥.<p>
=========================================================================*/
public void setSecretKeyAsObj(SecretKey sk) {
this.secretKey = sk;
password = null; //密码复位,知道密钥不能推知初始密码;
}
/**<p>
* =========================================================================
* <p> 获取秘密密钥信息
* @return SecretKey 秘密密钥.<p>
=========================================================================*/
public SecretKey getSecretKeyAsObj() {
return secretKey;
}
/**<p>
* =========================================================================
* <p> 获取当前密钥的字节信息
* @return byte[] 密钥字节信息.<p>
=========================================================================*/
public byte[] getSecretKeyAsBytes() {
if (secretKey != null) {
return secretKey.getEncoded();
}
return null;
}
/**<p>
* =========================================================================
* <p> 获取本密码机的算法
* @return String 本密码机的算法.<p>
=========================================================================*/
public String getAlgorithm() {
return this.algorithm;
}
/**<p>
* =========================================================================
* <p> 获取客户指定的密码
* @return byte[] 客户指定的密码.<p>
=========================================================================*/
public byte[] getPassword() {
return password;
}
/**<p>
* =========================================================================
* <p> 获取本密码机的算法描述
* @return String 本密码机的算法描述.<p>
=========================================================================*/
public String toString() {
return "本对称密码机实现之算法: " + this.algorithm;
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询