这是发生在我面试的时候,一个人问我,是否进行数据加密,由于我做的项目纯粹是练习所学的知识,所以我哑口无言,因此希望有实战经验的前辈们给我讲一下这方面应该怎么做,先谢了。

解决方案 »

  1.   

    按我理解就是 
    y=f(x)x是原文 y是密文
    x与y之间是一一映射关系
    f是转换逻辑 是加密的关键 比如最简单的异或等等
      

  2.   

    大致问题有三个
    1,加密的作用
    2,在开发j2ee程序的时候是如何加密的?
    3,如果数据存入数据库之前加密,那么加密的数据如何在查找的时候恢复?
    谢谢啊,我没说清楚。
      

  3.   

    是否进行数据加密你要回答,需要加密1 密码不能明文保存
    2 重要数据不能明文保存
    3 用户与服务器的通讯数据不能明文传输上面3种的安全性逐步提高1 可以采用 MD5 单向加密算法解决,保证用户的密码明文不会被窃取
    2 采用 RSA 等可逆加密算法,保证重要数据只有重要用户可见
    3 可采用 https , 也可采用 VPN 等技术进行数据加密传输
      

  4.   

    楼上的正解了!
    加密肯定是需要的了!j2ee基本上都是B/S形式的,只要和网络交互,就肯定存在安全问题
    我做的项目基本上都是MD5加密,也有用https的,
    对于楼上说的RSA,在做过的项目中也就是给每个用户加上访问权限,权限不同,所能够利用的功能就不同
      

  5.   

    那是当然的了
    如2楼所举的例子:y=f(x)
    如果f为加密函数,那么解密时就是求它的反函数x=f-1(y)有加密就存在解密,加密是为了让关系外的用户不可知,解密是为了只让关系用户可知
    关系用户需要拥有解密密钥,否则正如你说的加密可能失去意义但是实际情况往往比这复杂,各种加密算法虽然都是基于这种加密与解密进行的,但原理各不相同
    例如MD5,就算拿到密钥,求出反函数x=f-1(y)的可能性也微乎其微,这是算法出于安全性考虑的,
    也就是说它只能正向运算y=f(x),反过来不行。给你举个例子说明一下它的用处
    比如存储用户密码,这个密码可能相当重要,比如关系到一家老小,千万家产,国家前途,政府机密文件等等,
    反正你自己感觉重要就对了,如果直接将密码用明文的形式存在服务器上,数据库中,你就天天提心吊胆吧,
    说不定什么时候就会被黑。这种情况我们可以用md5算法,只将用户密码生成的摘要,也就是y放在数据库中,
    用户要登陆验证,根据他输入的报文x,用算法求出y,与库中的摘要进行比较认证,这样一来,密码x永远都掌握在
    用户手中,服务商只拿y,即使服务商出了什么问题也不大可能通过y还原出x各种加密算法原理不同,适用的场合也不同,要根据你的需要选择
    java.security.*是安全相关的包,你可以研究一下再给你一段md5算法参考一下    public static void main(String[] args) throws NoSuchAlgorithmException,
                UnsupportedEncodingException {
            String str = EncoderByMd5("12345"); //12345为密码
            System.out.println(str);
            System.out.println(checkpassword("12345", str));    }/** *//**利用MD5进行加密
         * @param str  待加密的字符串
         * @return  加密后的字符串
         * @throws NoSuchAlgorithmException  没有这种产生消息摘要的算法
         * @throws UnsupportedEncodingException  
         */
        public static String EncoderByMd5(String str) throws NoSuchAlgorithmException, UnsupportedEncodingException...{
            //确定计算方法
            MessageDigest md5=MessageDigest.getInstance("MD5");
            BASE64Encoder base64en = new BASE64Encoder();
            //加密后的字符串
            String newstr=base64en.encode(md5.digest(str.getBytes("utf-8")));
            return newstr;
        }/** *//**判断用户密码是否正确
         * @param newpasswd  用户输入的密码
         * @param oldpasswd  数据库中存储的密码--用户密码的摘要
         * @return
         * @throws NoSuchAlgorithmException
         * @throws UnsupportedEncodingException
         */
        public static boolean checkpassword(String newpasswd,String oldpasswd) throws NoSuchAlgorithmException, UnsupportedEncodingException...{
            if(EncoderByMd5(newpasswd).equals(oldpasswd))
                return true;
            else
                return false;
        }
      

  6.   

    有没有这方面的书可以看下,或是java网站防黑客的,我认识一个hacker,他总说今天黑了这个网站,明天黑了那个网站,所以我想,好好看看如何使自己做的网站安全是很重要的,不知道企业都怎么做的?
      

  7.   

    你可以到网站上下去,网站安全,密码学等,或找哪个hacker问问主要攻击网站哪些漏洞,针对学,估计见效快
      

  8.   

    K MD5已经被山大那个王晓云证明存在强碰撞了
    SHA目前还是安全的