关闭

java中的加密解密

标签: java加密解密
182人阅读 评论(0) 收藏 举报
分类:

几年前总结的了,搬到这儿来吧。。。


  1. 单向加密(信息摘要)---用来验证文件是否被修改
    • 说白了就是通过明文生成一个16进制字符串的密文,不可逆,只是对原始对象生成摘要信息.
    • 加密算法: "MD2""MD5""SHA1""SHA-256""SHA-384""SHA-512"
    • String a="abc";
      MessageDigest md=MessageDigest.getInstance("MD5");
      byte[] bi=a.getBytes();
      md.update(bi);
      System.out.println("字符:"+a+",摘要:"+new String(md.digest()));
  2. 双向加密---一般用来验证个人或者机构,也可以用来验证文件是否被修改
    • 双向加密大体意思就是明文加密后形成密文,可以通过算法还原成明文.
    1. 对称加密
      • 采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
      • 算法是一组规则,规定如何进行加密和解密。因此对称式加密本身不是安全的。
      • 常用的对称加密有:DES、IDEA、RC2、RC4、SKIPJACK、RC5、AES算法等
      • 解密时要用Cipher cipher=Cipher.getInstance("DES");构造方法新生成一个Cipher,否则会报错
      • String b="def";
        System.out.println("字符串:"+b);
        KeyGenerator keyg=KeyGenerator.getInstance("DES");//KEY生成器
        SecretKey key=keyg.generateKey();//密钥
        Cipher c=Cipher.getInstance("DES");//加密解密类
        c.init(Cipher.ENCRYPT_MODE, key);//加密或者解密初始化
        String enstr=new String(c.doFinal(b.getBytes()));//加密
        System.out.println("加密了...:"+enstr);
        System.out.println(".....");
        Cipher d=Cipher.getInstance("DES");
        d.init(Cipher.DECRYPT_MODE, key);//解密初始化
        System.out.println("解密了..."+new String(d.doFinal(enstr.getBytes())));
    2. 非对称加密
      • 非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥 (privatekey)。
      • 公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。 
      • RSA 公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
        • String me="abcd";
          System.out.println("明文是:" + me);
          KeyPairGenerator kpg=KeyPairGenerator.getInstance("RSA");
          KeyPair kp =kpg.generateKeyPair();
          RSAPublicKey rpubk=(RSAPublicKey)kp.getPublic();
          RSAPrivateKey rprik=(RSAPrivateKey)kp.getPrivate();
          Cipher c=Cipher.getInstance("RSA");
          c.init(Cipher.ENCRYPT_MODE,rpubk);
          byte[] enstr = c.doFinal(me.getBytes());
          String str =new String(enstr);
          System.out.println("加密后是:" + str);
          Cipher d=Cipher.getInstance("RSA");
          d.init(Cipher.DECRYPT_MODE,rprik);
          System.out.println("解密后是:" + new String(d.doFinal(enstr)));
      • Digital Signature Algorithm (DSA)是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。
        • DSA是基于整数有限域离散对数难题的,其安全性与RSA相比差不多。DSA的一个重要特点是两个素数公开,这样,当使用别人的p和q时,即使不知道私钥,你也能确认它们是否是随机产生的,还是作了手脚。RSA算法却做不到。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:16929次
    • 积分:291
    • 等级:
    • 排名:千里之外
    • 原创:7篇
    • 转载:32篇
    • 译文:1篇
    • 评论:3条
    文章分类
    最新评论