V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
DraymondG
V2EX  ›  问与答

一段关于加密解密的 Java 代码块,求运行结果和大致解释!

  •  
  •   DraymondG · 2018-03-07 12:03:03 +08:00 · 1271 次点击
    这是一个创建于 2488 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本人一直在学 python,而这几天反编译需要读一些 java 代码实在是读不来……

    遇到的是下面的这段代码:

    import android.os.Build.VERSION;
    import java.security.SecureRandom;
    import javax.crypto.Cipher;
    import javax.crypto.KeyGenerator;
    import javax.crypto.SecretKey;
    import javax.crypto.spec.SecretKeySpec;
    
    public class a
    {
      public static String a(String paramString)
      {
        return new String(a(a("JUSFOUN".getBytes()), b(paramString)));
      }
      
      protected static byte[] a(byte[] paramArrayOfByte)
      {
        KeyGenerator localKeyGenerator = KeyGenerator.getInstance("AES");
        if (Build.VERSION.SDK_INT >= 17) {}
        for (SecureRandom localSecureRandom = SecureRandom.getInstance("SHA1PRNG", "Crypto");; localSecureRandom = SecureRandom.getInstance("SHA1PRNG"))
        {
          localSecureRandom.setSeed(paramArrayOfByte);
          localKeyGenerator.init(256, localSecureRandom);
          return localKeyGenerator.generateKey().getEncoded();
        }
      }
      
      protected static byte[] a(byte[] paramArrayOfByte1, byte[] paramArrayOfByte2)
      {
        paramArrayOfByte1 = new SecretKeySpec(paramArrayOfByte1, "AES");
        Cipher localCipher = Cipher.getInstance("AES");
        localCipher.init(2, paramArrayOfByte1);
        return localCipher.doFinal(paramArrayOfByte2);
      }
      
      protected static byte[] b(String paramString)
      {
        int j = paramString.length() / 2;
        byte[] arrayOfByte = new byte[j];
        int i = 0;
        while (i < j)
        {
          arrayOfByte[i] = Integer.valueOf(paramString.substring(i * 2, i * 2 + 2), 16).byteValue();
          i += 1;
        }
        return arrayOfByte;
      }
    }
    

    大概知道是在加密解密,但实在是对 java 这块不熟悉。

    麻烦哪位大神帮忙大致解读一下这篇代码,然后帮忙跑一下 a("F8171AFB57B7B680944446E8F5741F7C")的结果?

    自己跑的时候,java 会报错,说没有 Crypto 这个 Provider 了,然后按照网上的说法解决还是不行。

    拜托了!

    3 条回复    2018-03-08 15:54:55 +08:00
    linyinma
        1
    linyinma  
       2018-03-08 15:18:20 +08:00
    你怎么跑的啊? 这是 Android Java 额
    DraymondG
        2
    DraymondG  
    OP
       2018-03-08 15:39:28 +08:00
    @linyinma 但里面只有一个版本判断需要 android 库吧,我把它改成静态参数了,还是报错。
    linyinma
        3
    linyinma  
       2018-03-08 15:54:55 +08:00
    @DraymondG http://m635674608.iteye.com/blog/1844777 这个 blog 能回答为什么出现没有 Provider,知道问题原因,自己然后找解决办法了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2796 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:54 · PVG 20:54 · LAX 04:54 · JFK 07:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.