zoukankan      html  css  js  c++  java
  • 算法(一)_加密算法

    现在开始重新复习下算法,那么,先看看加密算法。

    简称 全称 性质 说明 备注
    DES
    (Data Encryption Standard)
    数据加密算法 密钥,对称加密算法 简易加密算法 -
    RSA 支持变长密钥的公共密钥算法 公私密钥,非对称加密算法 公钥加密,私钥解密 -
    AES
    (Advanced Encryption Standard)
    高级加密标准 密钥,对称加密算法 下一代的加密算法标准 -
    MD5
    (Message Digest Algorithm 5)
    消息摘要算法 摘要算法 用于验证信息的正确性,不被修改 -
    SHA
    (Secure Hash Algorithm)
    安全哈希算法 数字签名 用于验证信息的正确性,不被修改 用很多扩展

    关于JAVA实现:Key

    密钥

    基本上,DES,RSA,AES等等的加密算法,为了保证不用使用场景下加密方式不同,需要使用密钥。
    密钥,可以看做一个方法,经过方法的【明文】变成【密文】,用以安全的传输。接受方再使用方法将【密文】转换成【明文】。以此做的安全加密的过程。

    对应java,密钥是Key(java.security.Key接口),而创建时,使用KeyGenerator或者启动的密钥生成器进行生成。如下AES密钥的生成:

    public static Key makeKey(String key) throws Exception {
        KeyGenerator keyGen = KeyGenerator.getInstance("AES"); // AES生成器
        keyGen.init(128, new SecureRandom(key.getBytes()));  // AES生成器初始化
        SecretKey secretKey = keyGen.generateKey(); // 生成密钥
        return new SecretKeySpec(secretKey.getEncoded(),"AES"); // 转为AES密钥
    }
    

    不过,用于RSA使用一对公钥私钥,所以特别的使用KeyPair(java.security.KeyPair接口),使用一对密钥进行:

    public static KeyPair makeKey(int keyLength) throws Exception{
        KeyPairGenerator keyPairGenerator=KeyPairGenerator.getInstance("RSA"); // RSA生成器
        keyPairGenerator.initialize(keyLength); // 根据长度生成,每次生成不一致
        return keyPairGenerator.generateKeyPair(); // 生成密钥
    }
    

    加密解密Cipher

    JAVA中,加密解密使用Cipher(javax.crypto.Cipher),不管是DES,RSA,AES,都只是Cipher的一直类型。简而言之,使用类型(DES,RSA,AES)和密钥,确定模式,即可加密解密,以AES为例:

    /**
     * 加密
     */
    public static byte[] encrypt(String msg,Key key) throws Exception {
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, key);
        return cipher.doFinal(msg.getBytes());
    }
    
    /**
     * 解密
     */
    public static byte[] decrypt(byte[] content,Key key) throws Exception {
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.DECRYPT_MODE, key);
        return cipher.doFinal(content);
    }
    

    信息摘要MessageDigest

    摘要或者说签名,简单的说,就是把一定的简要信息,转换成易于判断的遗传编码。传输中同时传输编码,用于判断信息正确性,接收方会再次对进行进行摘要处理,如果结果和传过来的信息不一致,则判断信息不正确,不予处理。
    java中的摘要处理使用MessageDigest:

    MessageDigest digest = MessageDigest.getInstance("md5");
    byte[] result = digest.digest(msg.getBytes());
    

    注意,直降输出的结果,需要通过加盐或者转换等处理,才能转成可看的结果

  • 相关阅读:
    vue、vuex、iview、vue-router报错集锦与爬坑记录
    iview框架select默认选择一个option的值
    datetimerangepicker配置及默认时间段展示
    windows下nvm安装node之后npm命令找不到问题解决办法
    The difference between the request time and the current time is too large.阿里云oss上传图片报错
    html5 移动适配写法
    JS判断设备类型跳转至PC端或移动端相应页面
    vue2.0生命周期好文章推荐
    vue如何正确销毁当前组件的scroll事件?
    Apache Shiro 反序列化RCE漏洞
  • 原文地址:https://www.cnblogs.com/changfanchangle/p/8993818.html
Copyright © 2011-2022 走看看