我正在尝试解密一个windows wifi密码在同一台机器上使用java,这是应该工作的 cryptUnprotectData()
但我得到了以下错误:
Exception in thread "main" com.sun.jna.platform.win32.Win32Exception: The data is invalid.
at com.sun.jna.platform.win32.Crypt32Util.cryptUnprotectData(Crypt32Util.java:128)
at com.sun.jna.platform.win32.Crypt32Util.cryptUnprotectData(Crypt32Util.java:103)
at com.sun.jna.platform.win32.Crypt32Util.cryptUnprotectData(Crypt32Util.java:90)
我正在使用以下java代码:
String encryptedWirelessKey = "01000000D08C9DDF0115D1118C7A00C0***TRUNCATED***";
byte[] bytes = Crypt32Util.cryptUnprotectData(encryptedWirelessKey.getBytes(Charset.defaultCharset()));
System.out.println(new String(bytes));
在这里,您可以阅读更多有关windows存储wifi密码的信息。当我直接从数据库复制数据时,为什么数据是无效的
XML keyMaterial
标签?我是这台机器的管理员,密码由我的用户帐户提供。
更新:
import com.sun.jna.platform.win32.Crypt32Util;
public class Testing
{
public static void main(String[] arguments) throws Exception
{
String encryptedWirelessKey = "01000000D08C9DDF0115D1118C7A00C0***TRUNCATED***";
byte[] bytes = Crypt32Util.cryptUnprotectData(hexStringToByteArray(encryptedWirelessKey));
System.out.println(new String(bytes));
}
private static byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i+1), 16));
}
return data;
}
}
这将引发以下异常:
Exception in thread "main" com.sun.jna.platform.win32.Win32Exception: Key not valid for use in specified state.
at com.sun.jna.platform.win32.Crypt32Util.cryptUnprotectData(Crypt32Util.java:128)
at com.sun.jna.platform.win32.Crypt32Util.cryptUnprotectData(Crypt32Util.java:103)
at com.sun.jna.platform.win32.Crypt32Util.cryptUnprotectData(Crypt32Util.java:90)
这到底是什么意思?缺乏权限?
1条答案
按热度按时间mzillmmw1#
你用的是
getBytes()
在十六进制字符串上,当您应该将十六进制字符串解析为字节时。从以下链接中选择您喜欢的方式。
在java中,如何将十六进制字符串转换为字节[]?
使用java将十六进制转储的字符串表示转换为字节数组?