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

发布于 2022-09-06 19:56:05 字数 1742 浏览 18 评论 0

本人一直在学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了,然后按照网上的说法解决还是不行。

拜托了!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

绳情 2022-09-13 19:56:05

这段代码是 Android 的吧。

你可能已经搜到过这篇文章了。

然后你这个代码不全吧?这些操作全都会抛异常但是方法签名上一个都没写。

而且关于这个 for 循环:

for (SecureRandom localSecureRandom = SecureRandom.getInstance("SHA1PRNG", "Crypto");; localSecureRandom = SecureRandom.getInstance("SHA1PRNG"))

难道它是想先尝试获取 ("SHA1PRNG", "Crypto") 再获取 ("SHA1PRNG") 吗,但是根据上一句 if (Build.VERSION.SDK_INT >= 17) {} 来说,这两行可以说完全没什么逻辑关系啊。

而且如果直接用 ("SHA1PRNG") 的话,在 b 方法中会报错。

Given final block not properly padded. Such issues can arise if a bad key is used during decryption.

要不你试试前面说的那个文章里提到的解密器。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文