首先来看一段java中对字符串加解密的代码:

//密钥

private String key = "123456789012345678901234";

//解密过程,先用Base64进行解密,然后再用3DES进行第二次解密,得到明文

public String decryptThreeDESECB(String src) throws Exception {
  DESedeKeySpec dks = new DESedeKeySpec(key.getBytes(charSet));
  SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
  SecretKey securekey = keyFactory.generateSecret(dks);
  Cipher cipher = Cipher.getInstance("DESede");
  cipher.init(Cipher.DECRYPT_MODE, securekey);
  byte[] retByte = cipher.doFinal(Base64.decodeBase64(src.getBytes(charSet)));
  return new String(retByte,charSet);
}

//加密过程,先用3DES进行加密,然后再用Base64进行第二次加密输出,得到密文
public String decryptThreeDESECBBYTE(byte[] EncodeByte) throws Exception {
  DESedeKeySpec dks = new DESedeKeySpec(key.getBytes(charSet));
  SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
  SecretKey securekey = keyFactory.generateSecret(dks);
  Cipher cipher = Cipher.getInstance("DESede");
  cipher.init(Cipher.DECRYPT_MODE, securekey);
  byte[] retByte = cipher.doFinal(Base64.decodeBase64(src.getBytes(charSet)));
  return new String(retByte,charSet);
}

在java中通过引入相应的库可以轻松实现该功能,而在c++中相应的确没有标准的库给调用,因此还是需要理解一下DES相关的知识,再去实现代码。

我们先来了解一下简单的DES/3DES/AES的区别:

DES

  如Mode为加密,则用Key 去把数据Data进行加密, 生成Data的密码形式(64位)作为DES的输出结果;

  如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果。

  在通信网络的两端,双方约定一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。这样,便保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性。

  通过定期在通信网络的源端和目的端同时改用新的Key,便能更进一步提高数据的保密性,这正是现在金融交易网络的流行做法。

3DES

  3DES是DES加密算法的一种模式,它使用3条64位的密钥对数据进行三次加密。数据加密标准(DES)是美国的一种由来已久的加密标准,它使用对称密钥加密法。

  3DES(即Triple DES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的加密标准),是DES的一个更安全的变形。它以DES为基本模块,通过组合分组方法设计出分组加密算法。

  设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明文,C代表密表,这样,

  3DES加密过程为:C=Ek3(Dk2(Ek1(P)))

  3DES解密过程为:P=Dk1((EK2(Dk3(C)))

  K1、K2、K3决定了算法的安全性,若三个密钥互不相同,本质上就相当于用一个长为168位的密钥进行加密。多年来,它在对付强力攻击时是比较安全的。若数据对安全性要求不那么高,K1可以等于K3。在这种情况下,密钥的有效长度为112位。

AES

  AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高。

  用AES加密2000年10月,NIST(美国国家标准和技术协会)宣布通过从15种候选算法中选出的一项新的密匙加密标准。Rijndael被选中成为将来的 AES。Rijndael是在1999年下半年,由研究员Joan Daemen 和 Vincent Rijmen 创建的。AES正日益成为加密各种形式的电子数据的实际标准。

  美国标准与技术研究院(NIST)于2002年5月26日制定了新的高级加密标准(AES)规范。

  AES算法基于排列和置换运算。排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。

  AES使用几种不同的方法来执行排列和置换运算。AES是一个迭代的、对称密钥分组的密码,它可以使用128、192和256位密钥,并且用128位(16字节)分组加密和解密数据。

  与公共密钥加密使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换和替换输入数据。

了解了相应的知识以后,我们再去写相应的c++代码。我这里有一个写好的和上面java实现功能一样的c++代码,供大家参考。地址为:

http://download.csdn.net/detail/liulong371212/9391330

java和c++中的DES\3DES\Base64的更多相关文章

  1. (iOS)Base64加密和DES加密、以及JAVA和iOS中DES加密统一性问题

    我们在项目中为了安全方面的考虑,通常情况下会选择一种加密方式对需要安全性的文本进行加密,而Base64加密和DES64加密是常用的加密算法.我记得我在前一个项目中使用的就是这两种加密算法的结合:Bas ...

  2. Java Base64、HMAC、SHA1、MD5、AES DES 3DES加密算法

    ●  BASE64 严格地说,属于编码格式,而非加密算法    ●  MD5(Message Digest algorithm 5,信息摘要算法)    ●  SHA(Secure Hash Algo ...

  3. Java利用DES/3DES/AES这三种算法分别实现对称加密

    转载地址:http://blog.csdn.net/smartbetter/article/details/54017759 有两句话是这么说的: 1)算法和数据结构就是编程的一个重要部分,你若失掉了 ...

  4. DES & 3DES 加密算法

    JAVA坑 跟其他公司java的对接口,一个细节对到吐血,具体: DesUtil.java(别人的反例) //package base_class; import java.io.IOExceptio ...

  5. .NET中的DES对称加密

    DES是一种对称加密(Data Encryption Standard)算法,于1977年得到美国政府的正式许可,是一种用56位密钥来加密64位数据的方法.一般密码长度为8个字节,其中56位加密密钥, ...

  6. 6. Java 加解密技术系列之 3DES

    Java 加解密技术系列之 3DES 序 背景 概念 原理 代码实现 结束语 序 上一篇文章讲的是对称加密算法 — — DES,这篇文章打算在 DES 的基础上,继续多讲一点,也就是 3 重 DES ...

  7. Java拓展教程:文件DES加解密

    Java拓展教程:文件加解密 Java中的加密解密技术 加密技术根据一般可以分为对称加密技术和非对称加密技术.对称加密技术属于传统的加密技术,它的加密和解密的密钥是相同的,它的优点是:运算速度快,加密 ...

  8. Java和C/C++进行DES/AES密文传输(借鉴)

    Java和C/C++进行DES/AES密文传输 声明:对于新手来说很难解决的一个问题,终于在非常煎熬之后找到这篇文章,所以借鉴过来.原文地址http://blog.sina.com.cn/s/blog ...

  9. C#加密解密(DES,AES,Base64,md5,SHA256,RSA,RC4)

    一:异或^简单加解密(数字类型) 1:原理: 异或用于比较两个二进制数的相应位,在执行按位"异或"运算时,如果两个二进制数的相应位都为1或者都为0,则返回0;如果两个二进制数的相应 ...

随机推荐

  1. Kaggle 项目之 Digit Recognizer

    train.csv 和 test.csv 包含 1~9 的手写数字的灰度图片.每幅图片都是 28 个像素的高度和宽度,共 28*28=784 个像素点,每个像素值都在 0~255 之间. train. ...

  2. 拉取代码过程中遇到的:post install error,please remove node_modules before retry!

    这是在git → clone 之后,安装npm intall时出现的错误,完整错误提示如下: 解决: // 1.先删除node_modules这个文件 $ rm -rf node_modules/ / ...

  3. 【Demo】jQuery 表格内容动态排序

    实现功能: 通过点击表头某个字段,实现内容的升序或降序排序. 效果如下: 完整代码: <!DOCTYPE html> <html> <head> <meta ...

  4. Centos7 使用Dockerfile 制作自己的Dotnetcore程序镜像

    准备Centos7环境及Docker环境 从Docker hub拉取 Microsoft/dotnet 基础镜像(可以使用国内加速) 向Centos7指定目录上传Dotnet Core程序,目录: / ...

  5. IOS-UISearchBar

    UISearchBar控件   最近用到搜索功能.于是,经过不断的研究,终于,有点懂了. 那就来总结一下吧,好记性不如烂笔头! 搜索,无疑可以使用UISearchBar控件! 那就先了解一下UISea ...

  6. h1标签

    h1标签一.每个网页只能拥有一个<H1>标签 H2,H3,H4可以有多个...但多个H1造成的后果是搜索引擎不知道你这个页面哪个标题内容最重要,会淡化这个页面的标题和关键词.H1用得好的话 ...

  7. hdu1151

    题解: 二分图边覆盖 n-最大匹配 代码: #include<cstdio> #include<cmath> #include<algorithm> #includ ...

  8. 严重:Error configuring application listener of class org.springframework.web.util.IntrospectorCleanupListener

    mave项目换了一个新的工作空间时出现的问题 原因: 其实是你的jar文件没有同步发布到自己项目的lib目录中(如果你是用Maven进行构建的话) 可以试试 下面的办法 解决方案: 项目点击右键 点击 ...

  9. 【LeetCode 28_字符串_匹配】Implement strStr()

    解法一:Brute-force int strStr(string haystack, string needle) { int m = haystack.size(); int n = needle ...

  10. 剑指offer--50.滑动窗口的最大值

    时间限制:1秒 空间限制:32768K 热度指数:157641 题目描述 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值.例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的 ...