zoukankan      html  css  js  c++  java
  • Java 加密技术(一)

    Java 加密技术(一)关键字: java 加密基础, base64, md5, sha    加密解密,曾经是我一个毕业设计的重要组件。在工作了多年以后回想当时那个加密、解密算法,实在是太单纯了。
        言归正传,这里我们主要描述Java已经实现的一些加密解密算法,如基本的BASE64、MD5(Message-Digest algorithm 5,信息-摘要算法)、SHA(Secure Hash Algorithm,安全散列算法),以及复杂的DES(Data Encryption Standard,数据加密算法)对称加密,RSA、ECC(Elliptic Curves Cryptography,椭圆曲线密码编码学)非对称加密算法。

        本片内容简要介绍BASE64MD5SHA三种加密方法。
        这三种加密算法,可谓是非可逆加密,就是不可解密的加密方法。我们通常只把他们作为加密的基础。单纯的以上三种的加密并不可靠。

    BASE64
    按照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形 式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)
    常见于邮件、http加密,截取http信息,你就会发现登录操作的用户名、密码字段通过BASE64加密的。
    通过java代码实现如下:

    Java代码
    1. /**
    2. * BASE64解密
    3. *
    4. * @param key
    5. * @return
    6. * @throws Exception
    7. */  
    8. protected static byte[] decryptBASE64(String key) throws Exception {  
    9.     return (new BASE64Decoder()).decodeBuffer(key);  
    10. }  
    11.   
    12. /**
    13. * BASE64加密
    14. *
    15. * @param key
    16. * @return
    17. * @throws Exception
    18. */  
    19. protected static String encryptBASE64(byte[] key) throws Exception {  
    20.     return (new BASE64Encoder()).encodeBuffer(key);  
    21. }  
    /** * BASE64解密 * * @param key * @return * @throws Exception */ protected static byte[] decryptBASE64(String key) throws Exception { return (new BASE64Decoder()).decodeBuffer(key); } /** * BASE64加密 * * @param key * @return * @throws Exception */ protected static String encryptBASE64(byte[] key) throws Exception { return (new BASE64Encoder()).encodeBuffer(key); }
    主要就是BASE64Encoder、BASE64Decoder两个类,我们只需要知道使用对应的方法即可。另,BASE加密后产生的字符数是8的倍数,如果不够位数以=符号填充。

    MD5
    MD5 -- message-digest algorithm 5 (信息-摘要算法)缩写,广泛用于加密和解密技术,常用于文件校验。校验?不管文件多大,经过MD5后都能生成唯一的MD5值。好比现在的ISO校验,都 是MD5校验。怎么用?当然是把ISO经过MD5后产生MD5的值。一般下载linux-ISO的朋友都见过下载链接旁边放着MD5的串。就是用来验证文 件是否一致的。

    通过java代码实现如下:
    Java代码
    1. /**
    2. * MD5加密
    3. *
    4. * @param obj
    5. * @return
    6. */  
    7. protected static byte[] encryptMD5(byte[] obj) {  
    8.     try {  
    9.          MessageDigest md5 = MessageDigest.getInstance("MD5");  
    10.          md5.update(obj);  
    11.   
    12.         return md5.digest();  
    13.      } catch (NoSuchAlgorithmException e) {  
    14.          e.printStackTrace();  
    15.      }  
    16.   
    17.     return null;  
    18. }  
    /** * MD5加密 * * @param obj * @return */ protected static byte[] encryptMD5(byte[] obj) { try { MessageDigest md5 = MessageDigest.getInstance("MD5"); md5.update(obj); return md5.digest(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return null; }

    通常我们不直接使用上述MD5加密。通常将MD5产生的字节数组交给BASE64再加密一把,得到相应的字符串。

    SHA
    SHA(Secure Hash Algorithm,安全散列算法),数字签名等密码学应用中重要的工具,被广泛地应用于电子商务等信息安全领域。
    通过java代码实现如下:
    Java代码
    1. /**
    2. * SHA加密
    3. *
    4. * @param obj
    5. * @return
    6. */  
    7. protected static byte[] encryptSHA(byte[] obj) {  
    8.     try {  
    9.          MessageDigest sha = MessageDigest.getInstance("SHA");  
    10.          sha.update(obj);  
    11.   
    12.         return sha.digest();  
    13.      } catch (NoSuchAlgorithmException e) {  
    14.          e.printStackTrace();  
    15.      }  
    16.   
    17.     return null;  
    18. }  
    /** * SHA加密 * * @param obj * @return */ protected static byte[] encryptSHA(byte[] obj) { try { MessageDigest sha = MessageDigest.getInstance("SHA"); sha.update(obj); return sha.digest(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return null; }
    类似于MD5,我们不直接使用上述SHA加密。通常将SHA产生的字节数组交给BASE64再加密一把,得到相应的字符串。

    给出一个完整类,如下:
    Java代码
    1. import java.security.MessageDigest;  
    2. import java.security.NoSuchAlgorithmException;  
    3.   
    4. import sun.misc.BASE64Decoder;  
    5. import sun.misc.BASE64Encoder;  
    6.   
    7. /**
    8. *
    9. * @author 梁栋
    10. * @version 1.0
    11. * @since 1.0
    12. */  
    13. public abstract class Coder {  
    14.     public static final String KEY_SHA = "SHA";  
    15.     public static final String KEY_MD5 = "MD5";  
    16.   
    17.     /**
    18.       * BASE64解密
    19.       *
    20.       * @param key
    21.       * @return
    22.       * @throws Exception
    23.       */  
    24.     protected static byte[] decryptBASE64(String key) throws Exception {  
    25.         return (new BASE64Decoder()).decodeBuffer(key);  
    26.      }  
    27.   
    28.     /**
    29.       * BASE64加密
    30.       *
    31.       * @param key
    32.       * @return
    33.       * @throws Exception
    34.       */  
    35.     protected static String encryptBASE64(byte[] key) throws Exception {  
    36.         return (new BASE64Encoder()).encodeBuffer(key);  
    37.      }  
    38.   
    39.     /**
    40.       * MD5加密
    41.       *
    42.       * @param obj
    43.       * @return
    44.       */  
    45.     protected static byte[] encryptMD5(byte[] obj) {  
    46.   
    47.         try {  
    48.              MessageDigest md5 = MessageDigest.getInstance(KEY_MD5);  
    49.              md5.update(obj);  
    50.   
    51.             return md5.digest();  
    52.          } catch (NoSuchAlgorithmException e) {  
    53.              e.printStackTrace();  
    54.          }  
    55.   
    56.         return null;  
    57.      }  
    58.   
    59.     /**
    60.       * SHA加密
    61.       *
    62.       * @param obj
    63.       * @return
    64.       */  
    65.     protected static byte[] encryptSHA(byte[] obj) {  
    66.   
    67.         try {  
    68.              MessageDigest sha = MessageDigest.getInstance(KEY_SHA);  
    69.              sha.update(obj);  
    70.   
    71.             return sha.digest();  
    72.          } catch (NoSuchAlgorithmException e) {  
    73.              e.printStackTrace();  
    74.          }  
    75.   
    76.         return null;  
    77.      }  
    78. }
  • 相关阅读:
    HNOI 2006 BZOJ 1195 最短母串
    BZOJ 3029 守卫者的挑战
    Codeforces 401D Roman and Numbers
    ZJOI2010 数字计数
    BZOJ 3329 Xorequ
    Codeforces 235 C
    SPOJ 8222 Substrings
    BZOJ 1396 识别子串
    (模板)归并排序
    poj3122 Pie (二分)
  • 原文地址:https://www.cnblogs.com/danghuijian/p/4400615.html
Copyright © 2011-2022 走看看