• [Android]加密技术


    还是解都使用同一key需要keypublic keyprivate key)。使用public key必须使用private key行解

    如,有A BA B A这时A使用了密钥生成生成keypublic keyprivate key), 首先A将public key通过网络发给了B,然后 B 用 public key对文件进行加密后,

    将经过加密后的文件发给A,最后 A再用 private key对该文件进行解密。自始至终private key都没通过网络进行传输,因此,只要private key不泄露,即使public key和经过加密的文件都被截获,仍然无法对该文件进行解密,

    因此,非对称加密较对称加密更安全。

    Android SDK支持如3
    1. MD5message-digest algorithm 5,信-), 广泛用于和解技术,用于校验管文件多大,MD5都能生成一的MD5。就在的ISO校验,都是MD5校验

    2.  SHASecure Hash Algorithm),数应用中重要工具广泛地应用于电子商务等信息安全领域。虽然,SHA与 MD5通过碰撞法都被破解了,但是SHA仍然是公,较之MD5

    3.  HMACHash Message Authentication Code,基于密钥Hash认证协议)。码实现别的原理是,用公开函数和密钥产生一个固定长度的值作为认证标识,用这个标识鉴别消息的完整性。

    使用一个密钥生成一个固定大小的小数据块,即 MAC,并将其加入到消息中,然后传输。接收方利用与发送方共享的密钥进行鉴别认证等。

    Android SDK支持4技术MD5SHAHMACAES。其中3种是AES是可实际上,如果Base64中的字符,也于一种Base64当于 key),

    是可下面来看看使用上 4用数和解

    MD5算法

    // source数是待加密的字符encrypt_MD5方法返回加密后的
    public String encrypt_MD5(String source) throws Exception
    {
      MessageDigest md5 = MessageDigest.getInstance("MD5");
      md5.update(source.getBytes());
      return Base64.encodeToString(md5.digest(), Base64.DEFAULT);

    }

     

    SHA算法

    public String encrypt_SHA(String source) throws Exception
    {
      MessageDigest sha = MessageDigest.getInstance("SHA");
      sha.update(source.getBytes());
      return Base64.encodeToString(sha.digest(), Base64.DEFAULT);
    }

     

    HMAC算法

    public static String initMacKey() throws Exception
    {
      KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5");
      SecretKey secretKey = keyGenerator.generateKey();
      return Base64.encodeToString(secretKey.getEncoded(), Base64.DEFAULT);
    }
    // HMAC
    加密
    public static String encrypt_HMAC(String source, String key)
    throws Exception
    {
      SecretKey secretKey = new SecretKeySpec(Base64.decode(key,
        Base64.DEFAULT), "HmacMD5");

      Mac mac = Mac.getInstance(secretKey.getAlgorithm());
      mac.init(secretKey);
      return Base64.encodeToString(mac.doFinal(source.getBytes()),
        Base64.DEFAULT);
    }
    // 使用HMAC数据进行加密
    try
    {
      String key = initMacKey();
      String result = encrypt_HMAC("Android", key);
    }
    catch (Exception e)
    {
    }

    AES算法

    // AES加密126加密也就16节)
    public String encrypt_AES(String src, String key) throws Exception
    {
      if (key == null)
      {
        Log.e("encrypt_aes_error", "Key
    ");
        return null;
      }
      //
    判断Key16
      if (key.length() != 16)
      {
        Log.e("encrypt_aes_error", "Key
    长度16");
        return null;
      }
      byte[] raw = key.getBytes();
      SecretKeySpec keySpec = new SecretKeySpec(raw, "AES");
      Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");//
    /模式/码方
      //
    使用CBC模式需要一个iv可增加加密算法的
      IvParameterSpec iv = new IvParameterSpec("0102030405060708".getBytes());

      cipher.init(Cipher.ENCRYPT_MODE, keySpec, iv);
      byte[] encrypted = cipher.doFinal(src.getBytes());

      return Base64.encodeToString(encrypted, Base64.DEFAULT);
    }
    // AES
    解密
    public String decrypt_AES(String src, String key) throws Exception
    {
      try
      {
        //
    判断Key否正确
        if (key == null)
        {
          Log.e("encrypt_aes_error", "Key
    ");      return null;
        }
      //
    判断Key16
      if (key.length() != 16)
      {
        Log.e("encrypt_aes_error", "Key
    长度16");
        return null;
      }
      byte[] raw = key.getBytes("ASCII");
      SecretKeySpec keySpec = new SecretKeySpec(raw, "AES");
      Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
      IvParameterSpec iv = new IvParameterSpec(
        "0102030405060708".getBytes());
      cipher.init(Cipher.DECRYPT_MODE, keySpec, iv);
      byte[] encrypted1 = Base64.decode(src, Base64.DEFAULT);
      try
      {
        byte[] original = cipher.doFinal(encrypted1);
        String originalString = new String(original);
        return originalString;
      }
      catch (Exception e)
      {
        return null;
      }
    }
    catch (Exception ex)
    {
      return null;

    }

    }

  • 相关阅读:
    Sql server Always On 读写分离配置方法
    MSSQL AlwaysOn中的“主角色中的连接”和“可读辅助副本”
    Windows Server 2019 Active Directory (AD域)时间不同步的解决方法
    windows server 2008 R2 域中用组策略隐藏指定磁盘驱动器(盘符)
    pg数据库优化
    Qlik
    如何查看数据库特别慢
    针对数量的null值最好要做变0处理
    pg如何实现月份的加减
    sql
  • 原文地址:https://www.cnblogs.com/spec-dog/p/3792683.html
Copyright © 2020-2023  润新知