鍍金池/ 問答/Java  Linux  網(wǎng)絡(luò)安全/ 一段關(guān)于加密解密的Java代碼塊,求運(yùn)行結(jié)果和大致解釋!

一段關(guān)于加密解密的Java代碼塊,求運(yùn)行結(jié)果和大致解釋!

本人一直在學(xué)python,而這幾天反編譯需要讀一些java代碼實(shí)在是讀不來……

遇到的是下面的這段代碼:

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;
  }
}

大概知道是在加密解密,但實(shí)在是對java這塊不熟悉。

麻煩哪位大神幫忙大致解讀一下這篇代碼,然后幫忙跑一下a("F8171AFB57B7B680944446E8F5741F7C")的結(jié)果?

自己跑的時(shí)候,java會報(bào)錯(cuò),說沒有Crypto這個(gè)Provider了,然后按照網(wǎng)上的說法解決還是不行。

拜托了!

回答
編輯回答
毀憶

這段代碼是 Android 的吧。

你可能已經(jīng)搜到過這篇文章了。

然后你這個(gè)代碼不全吧?這些操作全都會拋異常但是方法簽名上一個(gè)都沒寫。

而且關(guān)于這個(gè) for 循環(huán):

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

難道它是想先嘗試獲取 ("SHA1PRNG", "Crypto") 再獲取 ("SHA1PRNG") 嗎,但是根據(jù)上一句 if (Build.VERSION.SDK_INT >= 17) {} 來說,這兩行可以說完全沒什么邏輯關(guān)系啊。

而且如果直接用 ("SHA1PRNG") 的話,在 b 方法中會報(bào)錯(cuò)。

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

要不你試試前面說的那個(gè)文章里提到的解密器。

2018年1月9日 16:51