如果使用MD5对订单ID进行加密,输进去string类型,加密后也是string类型,但是订单id是int类型的,无法存入数据库,怎么办?

解决方案 »

  1.   

    改成String类型
      

  2.   

    首先,数据库中的类型肯定不能改吧,你加密完了改成int不就行了么
      

  3.   

    md5加密后有字母,无法转换int,如果能改数据类型还是改数据类型把。
      

  4.   

    md5 后的字符串可以 拿byte[] 最后用byte转为char  但MD5后字符长度太长 最好还是改数据库字段类型吧
      

  5.   

    数据库中string类型无法自增!
      

  6.   

    订单id是自增int型主键!
      

  7.   

    我建议你订单id别用主键,数据库加个订单id字段,程序处理该id的自增。
      

  8.   

    你把加密后的id,保存入数据库,那这个id加不加密,对你的业务没影响,
    比如,你的id加密后是 abc,存的就是abc,
    那么所有的业务操作,都是用abc在进行,这个abc跟123就没任何区别,无非是abc不好记忆,123好记忆而已。所以你的诉求还是不清晰,如果只是简单的希望订单id不容易记录,你用32位的GUID作为订单id就好了。
      

  9.   

    数据库中string类型无法自增!自增,你是需要解密了再自增的。
    肯定不是用md5,要用可逆的算法,比如des或者aes
      

  10.   

    id没有必要非要自增吧,SnowflakeIdWorker idWorker = new SnowflakeIdWorker(0, 0);可以这样生成不重复的id
      

  11.   

    新建一个字段,命名为appid,设置为唯一,主要储存ID加密后的md5
      

  12.   

    订单id别用主键,数据库加个订单id字段,程序处理该id的自增。 
      

  13.   

    订单id别用主键,数据库加个订单id字段,程序处理该id的自增。 
      

  14.   

    如果用MD5加密的话,那“加密后”的数据就可以说跟“原始ID值”没关系了。
    (严格意义上讲,MD5不能叫“加密算法”)
    如果你要想实现“ID自增”,那必须是“可逆加密算法”才行。可以参考我一位朋友在以前提出的方案: 对“序号”进行加密。
     他的要求就是,对“连续”的序号(纯10进制数值)进行加密、
     但加密后的结果仍然是“纯10进制”的数值、并且固定位数。
    不过具体实现方法我不便透露,你也可以“自由发挥”的…………参考效果如下:上面图中,列表中每行“左边”是原始的序号,右边则是对应的“加密”结果。
    可以看到:连续的序号,在加密后是“杂乱无章”的。
     但这是“可逆”的:可以按加密结果“解密”出原始的序号。
     并且加密结果里面还含有“校验位”,并不是你随便输入一个“加密结果”都能“解密”。如果楼主要运用这种方法的话,对应你的“目的”,
      我建议在数据库中增加一个字段,用于存储“加密的订单ID”。
     需要用string类型、或者类似INT64的类型(因为加密结果值比较大)。
    而你目前说的“ID”就是存储“订单记录序号”而已;
     这个“序号”跟实际的“订单ID”之间没有直接关系;
     只需要“生成新ID”的时候,比“最大序号”中的那个订单ID值大就行了。
    比如:
    序号0对应的订单ID,是100012(可以从“任意值”开始);
    序号1对应的订单ID也许是100053、也许是200000等。
    在生成下一个“序号2”时,只要比“序号1”的订单ID大就行…………
      

  15.   

    严格来说,MD5不是加密,只是摘要,它无法解密
    另外,虽然两个不同的源被MD5之后得到相同的值的可能性非常……非常非常低,但这种可能依然是存在的。也就是说,两个不同的订单,有可能出现相同的MD5值最后,订单Id进行MD5之后,最终还是要存进数据库,但又无法解密,所以到最后只能用密文进行查询等业务处理,那么这样的加密又有什么意义呢。设计思路本身有问题!建议楼主把你的根本愿景说出来,让别人给你想想别的方案,别走进死胡同
      

  16.   

    你可以Integer.parseInt(s)
      

  17.   

    不明白这种方式!订单id要加密?如果你的订单有问题,你怎么反查呢?如果你的id是一段容易猜测的明码,为啥不能弄成long型或者guid呢
      

  18.   

    ase加密算法加密一下啊
      

  19.   

    加密后是一串字符串,比如:asdftgffhhhyf等
      

  20.   

    用uuid试试,平时我们都用这个来解决的
      

  21.   

    ID一般用uuid吧!
      

  22.   

    不谈实现,只谈设计,订单号是能够在业务层面唯一确定某只交易,id是在数据存储层面唯一确定某条记录,在不同的系统实现时,有可能同一订单号对应对应多个订单id,但不会出现同一个id(同一条订单记录)对(同一条订单记录)应多个订单号,不知道你问题的真实使用场景是什么,更不明白你为什么要强行把这两个不同概念的字段糅在一起并加密