如果使用MD5对订单ID进行加密,输进去string类型,加密后也是string类型,但是订单id是int类型的,无法存入数据库,怎么办?
解决方案 »
- JAVA中的List问题
- java的32位MD5加密与php中的32位MD5加密结果不一样。求帮助。急急急
- webservice服务端如何控制并发,请同志们指教!~
- 怎么样才能做出来一个像土豆网一样的网站
- 请教一个jsf下拉列表的问题
- struts中下拉列表的三级联动问题!急!!!
- 大家经常用JUNIT吗?
- JTable焦点控制的问题(如何使用KeyboardFocusManager)
- 为什么mysql安装不了?
- execute node failed. Execute node failed :failed to receive from server
- 这个是哪里错了
- 项目可以运行但是spring配置文件第一行有红叉
比如,你的id加密后是 abc,存的就是abc,
那么所有的业务操作,都是用abc在进行,这个abc跟123就没任何区别,无非是abc不好记忆,123好记忆而已。所以你的诉求还是不清晰,如果只是简单的希望订单id不容易记录,你用32位的GUID作为订单id就好了。
肯定不是用md5,要用可逆的算法,比如des或者aes
(严格意义上讲,MD5不能叫“加密算法”)
如果你要想实现“ID自增”,那必须是“可逆加密算法”才行。可以参考我一位朋友在以前提出的方案: 对“序号”进行加密。
他的要求就是,对“连续”的序号(纯10进制数值)进行加密、
但加密后的结果仍然是“纯10进制”的数值、并且固定位数。
不过具体实现方法我不便透露,你也可以“自由发挥”的…………参考效果如下:上面图中,列表中每行“左边”是原始的序号,右边则是对应的“加密”结果。
可以看到:连续的序号,在加密后是“杂乱无章”的。
但这是“可逆”的:可以按加密结果“解密”出原始的序号。
并且加密结果里面还含有“校验位”,并不是你随便输入一个“加密结果”都能“解密”。如果楼主要运用这种方法的话,对应你的“目的”,
我建议在数据库中增加一个字段,用于存储“加密的订单ID”。
需要用string类型、或者类似INT64的类型(因为加密结果值比较大)。
而你目前说的“ID”就是存储“订单记录序号”而已;
这个“序号”跟实际的“订单ID”之间没有直接关系;
只需要“生成新ID”的时候,比“最大序号”中的那个订单ID值大就行了。
比如:
序号0对应的订单ID,是100012(可以从“任意值”开始);
序号1对应的订单ID也许是100053、也许是200000等。
在生成下一个“序号2”时,只要比“序号1”的订单ID大就行…………
另外,虽然两个不同的源被MD5之后得到相同的值的可能性非常……非常非常低,但这种可能依然是存在的。也就是说,两个不同的订单,有可能出现相同的MD5值最后,订单Id进行MD5之后,最终还是要存进数据库,但又无法解密,所以到最后只能用密文进行查询等业务处理,那么这样的加密又有什么意义呢。设计思路本身有问题!建议楼主把你的根本愿景说出来,让别人给你想想别的方案,别走进死胡同