如何用java对数据加密,生成的密文是唯一的

Python018

如何用java对数据加密,生成的密文是唯一的,第1张

用户提供的是明文,数据库里面存储的是密文

不管怎么样,加密也好,解密也好,如果要比较相等性,这两个过程肯定要有一个,这个是没有选择的,需要提高性能的话只能做两点:

1、将用户的明文加密为密文后再与数据库中的比较,原因是这样只加密一次就可以,如果解密的话就要把数据库的密文全部解密,这是不现实的

2、在密文所在的列上建立索引,增加搜索速度,这个速度增长是很显著的,虽然会失去一些插入性能。

3、将对应的SQL写成存储过程。省去预编译的时间。这个速度的提高也是很明显的。

至于你说的“怎么能保证不一样得明文加密后生成不一样得密文”

MD5就可以

MD5有两个特性:

1、任意两段明文数据,加密以后的密文不会是相同的

2、任意一段明文数据,经过加密以后,其结果永远是不变的

网上MD5加密的类应该有写好的

大致上方法就是这样了,都做到的话应该没有问题了,不会影响你的性能的

现在很多加密算法的 比如你可以使用XXTea加密。前端使用post请求,请求之前将你要传的参数 组合成一个json格式,之后进行XXTea加密,加密完之后 将加密得到的字符串放到post 请求数据中。后台加一个拦截器,拿到你的请求地址以及加密字符串,然后将字符串解密 得到一个map,再通过request得到的ParamRequestWrapper 将解密后的参数放回去,这样你的方法就可以照常拿到数据了。

String加密 实际上也是对String的 byte[] 加密。

通常一种加密算法,都针对的是字节数组,而非String 或者int。

因为所有上述这些类型都可以用 byte[]表示,只要开发一次就可以针对所有类型加密了

把int转化成 byte[]加密就可以了

byte[4] intbytes = new byte[4] 然后用位移运算,得到int的每一个byte

int value = 1000

intbytes[0] = (byte)(value &0x000000FF)

intbytes[1] = (byte)((value &0x0000FF00) >>8)

intbytes[2] = (byte)((value &0x00FF0000) >>16)

......

String换算成byte就更容易了 String.getBytes("utf-8") 参数是字符集名字 可以不用指定,但是你就不确定它到底用的哪种字符集。