Code Monkey home page Code Monkey logo

aes-rsa-java's Introduction

aes-rsa-java AES+RSA结合应用java示例

介绍

随着Internet网的广泛应用,信息安全问题日益突出,以数据加密技术为核心的信息安全技术也得到了极大的发展。 目前的数据加密技术根据加密密钥类型可分私钥加密(对称加密)系统和公钥加密(非对称加密)系统。对称加密算法是较传统的加密体制, 通信双方在加/解密过程中使用他们共享的单一密钥,鉴于其算法简单和加密速度快的优点,目前仍然是主流的密码体制之一。 最常用的对称密码算法是数据加密标准(DES)算法,但是由于DES密钥长度较短,已经不适合当今分布式开放网络对数据加密安全性的要求。 最后,一种新的基于Rijndael算法对称高级数据加密标准AES取代了数据加密标准DES。 非对称加密由于加/解密钥不同(公钥加密,私钥解密),密钥管理简单,也得到广泛应用。RSA是非对称加密系统最著名的公钥密码算法。

加解密流程

  1. 服务器端(server)和客户端(client)分别生成自己的密钥对
  2. server和client分别交换自己的公钥
  3. client生成AES密钥(aesKey)
  4. client使用自己的RSA私钥(privateKey)对请求明文数据(params)进行数字签名
  5. 将签名加入到请求参数中,然后转换为json格式
  6. client使用aesKey对json数据进行加密得到密文(data)
  7. client使用sever的RSA公钥对aesKey进行加密(encryptkey)
  8. 分别将data和encryptkey作为参数传输给服务器端

服务器端进行请求响应时将上面流程反过来即可

文章详解

开放接口的安全验证方案(AES+RSA)

aes-rsa-java's People

Contributors

wustrive2008 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

aes-rsa-java's Issues

Insecure Hash Functions

Hi there, we found that the following places using insecure hash functions:

/home/xwt/IdeaProjects/aes-rsa-java/src/main/java/com/wustrive/aesrsa/util/Digest.java:19: error: [algorithm.not.allowed] Algorithm: MD5 is not allowed by the current rules
			MessageDigest md = MessageDigest.getInstance("MD5");
			                                             ^
/home/xwt/IdeaProjects/aes-rsa-java/src/main/java/com/wustrive/aesrsa/util/Digest.java:33: error: [algorithm.not.allowed] Algorithm: MD5 is not allowed by the current rules
			MessageDigest md = MessageDigest.getInstance("MD5");
			                                             ^
/home/xwt/IdeaProjects/aes-rsa-java/src/main/java/com/wustrive/aesrsa/util/Digest.java:66: error: [algorithm.not.allowed] Algorithm: MD5 is not allowed by the current rules
			md = MessageDigest.getInstance("MD5");
			                               ^
/home/xwt/IdeaProjects/aes-rsa-java/src/main/java/com/wustrive/aesrsa/util/Digest.java:102: error: [algorithm.not.allowed] Algorithm: SHA is not allowed by the current rules
			md = MessageDigest.getInstance("SHA");
			                               ^
/home/xwt/IdeaProjects/aes-rsa-java/src/main/java/com/wustrive/aesrsa/util/Digest.java:132: error: [algorithm.not.allowed] Algorithm: SHA is not allowed by the current rules
			md = MessageDigest.getInstance("SHA");
			                               ^
/home/xwt/IdeaProjects/aes-rsa-java/src/main/java/com/wustrive/aesrsa/util/Digest.java:162: error: [algorithm.not.allowed] Algorithm: SHA1 is not allowed by the current rules
			MessageDigest md = MessageDigest.getInstance("SHA1");
			                                             ^
/home/xwt/IdeaProjects/aes-rsa-java/src/main/java/com/wustrive/aesrsa/util/EncryptionUtil.java:23: error: [algorithm.not.allowed] Algorithm: MD5 is not allowed by the current rules
            MessageDigest md = MessageDigest.getInstance("MD5");
                                                         ^
/home/xwt/IdeaProjects/aes-rsa-java/src/main/java/com/wustrive/aesrsa/util/EncryptionUtil.java:57: error: [algorithm.not.allowed] Algorithm: SHA-1 is not allowed by the current rules
            MessageDigest md = MessageDigest.getInstance("SHA-1");
                                                         ^

客户端解密过程的疑问

String aeskey = RSA.decrypt(Req.encryptkey, serverPrivateKey);
解密服务器的响应时为什么不用客户端的私钥clientPrivateKey,这时客户端相对服务器端是接收方,不是应该用接收方的私钥解密吗?

几个问题

看了下这个方案的 Java 代码,有几个问题:
1.
https://github.com/wustrive2008/aes-rsa-java/blob/master/src/main/java/com/wustrive/aesrsa/util/RandomUtil.java

这个竟然用的是java.util.Random。
java.util.Random 不是密码学安全的!

"AES/ECB/PKCS5Padding";

AES绝对不要使用 ECB 模式!

https://zh.wikipedia.org/wiki/%E5%9D%97%E5%AF%86%E7%A0%81%E7%9A%84%E5%B7%A5%E4%BD%9C%E6%A8%A1%E5%BC%8F

HMAC 用 javax.crypto.Mac 就行了

http://stackoverflow.com/questions/3208160/how-to-generate-an-hmac-in-java-equivalent-to-a-python-example

不需要自己实现。
楼主的实现冗余代码太多。

建议废掉 HMAC-MD5 和 HMAC-SHA1,这俩已经不安全了。
1.
https://github.com/wustrive2008/aes-rsa-java/blob/master/src/main/java/com/wustrive/aesrsa/util/EncryptionUtil.java

这个提取一个 byte to hex 的公共函数出来就行了。

可以省掉复制粘贴。

byte to hex 也不需要写这么长。几行搞定:

http://stackoverflow.com/questions/15429257/how-to-convert-byte-array-to-hexstring-in-java

RSA 1024已经不安全了,起码要2048!

https://github.com/wustrive2008/aes-rsa-java/blob/master/src/main/java/com/wustrive/aesrsa/util/RSA.java

"SHA1WithRSA" 已经被废弃,建议更新成 SHA256WithRSA

建议楼主好好看看Facebook的这个项目:

https://github.com/facebook/conceal

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.