2 sinat 33625560 sinat_33625560 于 2017.09.13 17:04 提问

java加密,密文长度可以小于等于明文长度吗?

目前遇到一个问题,需要把数据库中所有涉及到身份证号的表的字段从明文变成密文,但是表设计的时候身份证号码字段长度只有18位,有没有办法可以在不改变表接口(需要改动的表太多了)然后储存密文,并且密文是可以反解的

9个回答

qq_23126581
qq_23126581   Rxr 2017.09.13 17:07

你做身份证插入的时候就应该加密了,你的数据库的字段长度不限制都行,在插入身份证的时候判断是不是15位或者18位,然后进行加密操作,插入数据库,读取的时候自然要用到解密。

oyljerry
oyljerry   Ds   Rxr 2017.09.13 17:07

没有,变短了的,一般不能支持反解了。

fanyizhuang
fanyizhuang   2017.09.13 17:31

可以,比较是用加密后的比,解密一般会有些问题

q690080900
q690080900   2017.09.13 17:36

可以的 你可以这样 把身份证长度 两位两位分成一组 然后转成16进制 或者更高的进制

liu1823612484
liu1823612484   2017.09.13 18:25

可以的,只不过解密的时候会出现问题

zengqing2010
zengqing2010   2017.09.13 19:40

可以的,只要把加解密的规则定义清楚就行,最简单的比如大写变小写之类 肯定长度不变,当然可以定义比较复杂的规则

u011781616
u011781616   2017.09.13 21:40

你可以把省份正分2组,1-17位是数字(为一组),最后一位可能是数字或者X(为一组),然后把第一组转成16进制,你只需要加密第一组就可以了。
比如身份证44088219940705278X
44088219940705278 转成16进制 9ca200a0585400 假如加密(加密算法可以自己定义)后 ,变成 09fgfse438sjc
最后保存到数据库中 是 09fgfse438sjcX

然后你返回到客户端的时候,再逆向操作就行。

dl0246
dl0246   2017.09.13 21:57

分享一段之前写的简单编码和解码代码,给你点提示,首先可以肯定的是你的需求可以做到!
若需要解码代码,请跟我留言。

 /**
       * 简单的字符穿编码
       **/
      public static String encode(String ss,String enc)
      {
        StringBuffer sb=new StringBuffer("");
        int x=0;
        for (int i=0;i<ss.length();i++)
        {
          int z=ss.charAt(i)^enc.charAt(x);
          x++;
          if (x>=enc.length()) x=0;
          if (i>0) sb.append('|');
          sb.append(Long.toHexString(z));
        }
        return sb.toString();
      }
huang931027
huang931027   2017.09.14 09:20

简单的加密就可以了。0对应A 1对应B 依次类推。X不变不就可以了,

Csdn user default icon
上传中...
上传图片
插入图片