一段关于加密解密的Java代码块,求运行结果和大致解释!
本人一直在学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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这段代码是 Android 的吧。
你可能已经搜到过这篇文章了。
然后你这个代码不全吧?这些操作全都会抛异常但是方法签名上一个都没写。
而且关于这个
for
循环:难道它是想先尝试获取
("SHA1PRNG", "Crypto")
再获取("SHA1PRNG")
吗,但是根据上一句if (Build.VERSION.SDK_INT >= 17) {}
来说,这两行可以说完全没什么逻辑关系啊。而且如果直接用
("SHA1PRNG")
的话,在b
方法中会报错。要不你试试前面说的那个文章里提到的解密器。