现在需求是这样,假如一个工资表,里面存放公司员工的工资,如果存明文的话,那么谁有数据库权限就能直接看到表里面的数据。
  如果有运维还好,开发只需要写加密算法,秘钥写配置文件中由运维来设置;这样开发就不知道秘钥,所以就算连接到数据库,也无法解密;而运维只知道秘钥,不知道加密算法(暂不考虑运维会写代码和反编译代码来看),光看数据库看到的也是加密内容,这样开发和运维谁都无法解密。
  现在情况是,公司没有运维,发布都是开发来发布,那么开发肯定就知道秘钥了;
  不知道应该怎么设计了,有没有大佬给点思路。

解决方案 »

  1.   

    这个比较简单,根本不需要加密,你只需要将敏感的数据在保存到数据前转化成long型,这样即使是运维看到了,他也不知道这是什么意思,在向我输出的时候,再把long类型转化成真实的数据输出即可,这样如果数据量比较大的话,后台的效率还是很高的,之前做过类似的需求,就是加密一些敏感数据,防止运维之类的技术人员接触真实数据,这里贴一源码。
            double a=11.2d;
            System.out.println("转化前:"+a);
            long temp=Double.doubleToLongBits(a);
            System.out.println("转化后:"+temp);
            Double b=Double.longBitsToDouble(temp);
            System.out.println("还原:"+b);如果我的回答帮助到了你,我的公众号了解一下呗,谢谢。
      

  2.   

    Quote: 引用 5 楼 冰与火IAF 的回复:

    这个比较简单,根本不需要加密,你只需要将敏感的数据在保存到数据前转化成long型,这样即使是运维看到了,他也不知道这是什么意思,在向我输出的时候,再把long类型转化成真实的数据输出即可,这样如果数据量比较大的话,后台的效率还是很高的,之前做过类似的需求,就是加密一些敏感数据,防止运维之类的技术人员接触真实数据,这里贴一源码。
            double a=11.2d;
            System.out.println("转化前:"+a);
            long temp=Double.doubleToLongBits(a);
            System.out.println("转化后:"+temp);
            Double b=Double.longBitsToDouble(temp);
            System.out.println("还原:"+b);你这个只能对double类型啊,我需要的是字符串