不管怎么样,加密也好,解密也好,如果要比较相等性,这两个过程肯定要有一个,这个是没有选择的,需要提高性能的话只能做两点:
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") 参数是字符集名字 可以不用指定,但是你就不确定它到底用的哪种字符集。