我正在尝试将js函数转换为java
function keygen(code, serial) {
code = parseInt(/([0-9-]{12})/.exec(code)[0].replace(/-/g, ''))
return ((code + 0x26946948) ^ parseInt(serial.replace(/-/g, ''), 16)) >>> 0
}
keygen('7043-1667-03f9-f6', 'C6AD-0E40')
上面的代码返回214930807,这是正确的数字
但在爪哇我做到了
private long keygens(String code) {
int c =Integer.parseInt(code.substring(0, 12).replaceAll("[a-zA-Z-]", "").replaceFirst("^0+(?!$)", ""))+647260488;
String s=executeVolCommand().replaceAll("[-]", "");
long dec=Long.parseUnsignedLong(s,16);
System.out.print(executeVolCommand());
return (c^dec)>>>0;
}
public String executeVolCommand()
{
String NEWLINE = System.getProperty("line.separator");
StringBuffer buffer = new StringBuffer();
try{
Process pb = new ProcessBuilder("cmd","/c", "vol").start();
InputStream in = pb.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = br.readLine()) != null) {
buffer.append(line + NEWLINE);
}
}
catch(Exception e){e.printStackTrace();}
String s= buffer.toString().trim();
String[] words = s.split(" ");
String lastWord = words[words.length - 1];
return lastWord;
}
但我得到了这个错误
(C:)vsn:-961737152(D:)
vsn:1343112398线程“AWT-EventQueue-0”java中的异常。lang.NumberFormatException:对于输入html" target="_blank">字符串,java中的“7043166703”。lang.NumberFormatException。java上的forInputString(NumberFormatException.java:65)。整型。java上的parseInt(Integer.java:583)。整型。keygen上的parseInt(Integer.java:615)。keygens(keygen.java:179)位于keygen。在keygen$3上访问$3(keygen.java:177)。在javax上执行的操作(keygen.java:152)。摆动抽象按钮。fireActionPerformed(AbstractButton.java:2022)在javax上发布。摆动AbstractButton$Handler。actionPerformed(AbstractButton.java:2348)在javax上运行。摆动DefaultButtonModel。fireActionPerformed(DefaultButtonModel.java:402)在javax上运行。摆动DefaultButtonModel。在javax上按下setPressed(DefaultButtonModel.java:259)。摆动普拉夫。基本的基本按钮列表。在java上释放鼠标(BasicButtonListener.java:252)。awt。组成部分javax上的ProcessMouseeEvent(Component.java:6539)。摆动JComponent。java上的processMouseEvent(JComponent.java:3324)。awt。组成部分java上的processEvent(Component.java:6304)。awt。容器java上的processEvent(Container.java:2239)。awt。组成部分java上的dispatchEventImpl(Component.java:4889)。awt。容器java上的dispatchEventImpl(Container.java:2297)。awt。组成部分java上的dispatchEvent(Component.java:4711)。awt。轻量级调度员。java上的retargetMouseEvent(Container.java:4904)。awt。轻量级调度员。java上的ProcessMouseeEvent(Container.java:4535)。awt。轻量级调度员。java上的dispatchEvent(Container.java:4476)。awt。容器java上的dispatchEventImpl(Container.java:2283)。awt。窗java上的dispatchEventImpl(Window.java:2746)。awt。组成部分java上的dispatchEvent(Component.java:4711)。awt。事件队列。java上的dispatchEventImpl(EventQueue.java:760)。awt。事件队列。在java上访问500美元(EventQueue.java:97)。awt。3美元。在java上运行(EventQueue.java:709)。awt。3美元。在java上运行(EventQueue.java:703)。安全访问控制器。java上的doPrivileged(本机方法)。安全ProtectionDomain$JavaSecurityAccessImpl。java上的doIntersectionPrivilege(ProtectionDomain.java:74)。安全ProtectionDomain$JavaSecurityAccessImpl。java上的doIntersectionPrivilege(ProtectionDomain.java:84)。awt。事件队列4美元。在java上运行(EventQueue.java:733)。awt。事件队列4美元。在java上运行(EventQueue.java:731)。安全访问控制器。java上的doPrivileged(本机方法)。安全ProtectionDomain$JavaSecurityAccessImpl。java上的doIntersectionPrivilege(ProtectionDomain.java:74)。awt。事件队列。java上的dispatchEvent(EventQueue.java:730)。awt。EventDispatchThread。java上的pumpOneEventForFilters(EventDispatchThread.java:205)。awt。EventDispatchThread。java上的pumpEventsForFilter(EventDispatchThread.java:116)。awt。EventDispatchThread。java上的pumpEventsForHierarchy(EventDispatchThread.java:105)。awt。EventDispatchThread。java上的pumpEvents(EventDispatchThread.java:101)。awt。EventDispatchThread。java上的pumpEvents(EventDispatchThread.java:93)。awt。EventDispatchThread。运行(EventDispatchThread.java:82)
此外,如果我将7043-1667-03f9-f6更改为0043-1667-03f9-f6,错误将消失,但ofc会给出错误的号码
此外,我试图在java代码中调用js文件,但它返回2.1493087E8
private String keygens(String code) throws ScriptException, IOException, NoSuchMethodException {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
// read script file
engine.eval(Files.newBufferedReader(Paths.get("C:/Users/MJ/eclipse-workspace/SM_keygen2/js/keygen.js"), StandardCharsets.UTF_8));
Invocable inv = (Invocable) engine;
// call function from script file
Object s = inv.invokeFunction("keygen", code,executeVolCommand());
System.out.println(s);
return s.toString();
}
public String executeVolCommand()
{
String NEWLINE = System.getProperty("line.separator");
StringBuffer buffer = new StringBuffer();
try{
Process pb = new ProcessBuilder("cmd","/c", "vol").start();
InputStream in = pb.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = br.readLine()) != null) {
buffer.append(line + NEWLINE);
}
}
catch(Exception e){e.printStackTrace();}
String s= buffer.toString().trim();
String[] words = s.split(" ");
String lastWord = words[words.length - 1];
return lastWord;
}
谢谢你的帮助
参考:如何在java中复制javascript位移位、位操作,
在Java中:
Java的long类型可以让您获得复制JavaScript位操作所需的所有精度,但在使用
所以,我改变了
return (c^dec)>>>0;
到
return ((c& 0xffffffffL)^dec)>>>0;
它就像一个符咒。
感谢@PM77-1的有用评论和@Scary袋熊修复错误
您需要使用Long.parse长数量的code
和串行
public class HelloWorld {
public static void main(String[] args) {
// result: 214930807
System.out.println("result: " + keygen("7043-1667-03f9-f6", "C6AD-0E40") );
}
private static int keygen(String code, String serial) {
return (int)((Long.parseLong(code.substring(0,12).replaceAll("[a-zA-Z-]",""))+0x26946948)^Long.parseLong(serial.replaceAll("[-]", ""),16));
}
}
运行代码
问题内容: 我使用PhoneGap开发了一个应用程序。我得到了一项在后台进行本地编码的服务(该服务和手机缺口应用程序在同一项目中)。不幸的是,我想从此服务中调用javascript函数。因此,我在网上搜索并创建了一些有趣的东西:创建一个扩展Plugin的类并在其中进行一些处理。然后我发现了这个: 我用此代码进行了测试,但是发生了一些错误: 这是我测试的方式: 在类c中,execute方法如下: 当
主要内容:JS 定义函数,JS 调用函数,参数的默认值,JS 函数返回值,JS 函数表达式函数是一组执行特定任务(具有特定功能)的,可以重复使用的代码块,前面几节中用到的 alert()、write() 就是 JavaScript 中内置的函数。 除了使用内置函数外,我们也可以自行创建函数(自定义函数),然后在需要的地方调用这个函数,这样不仅可以避免编写重复的代码,还有利于代码的后期维护。本节我们主要来介绍一下如何使用 JavaScript 编写一个自己的函数。 JS 定义函数 JS
在 JavaScript中,函数是头等 (first-class) 对象,因为它们可以像任何其他对象一样具有属性和方法。它们与其他对象的区别在于函数可以被调用。简而言之,它们是 Function 对象。(MDN) 函数就是一段代码片段,调用函数就是执行函数中的代码。 1. 函数的使用 1.1 语法 函数使用前通常与变量一样需要先进行声明,用 function 关键字定义函数。 // 常见的函数的定
本文向大家介绍JavaScript的布尔函数?,包括了JavaScript的布尔函数?的使用技巧和注意事项,需要的朋友参考一下 布尔函数 在开发过程中,开发人员可能会遇到是/否的情况。那时可以使用Boolean()函数。它只会导致true或false。让我们详细讨论它。 语法 它接受一个表达式并对其进行仔细检查,并根据表达式的有效性显示true或false。 示例1 在下面的示例中,使用Boole
本文向大家介绍JavaScript中的Function函数,包括了JavaScript中的Function函数的使用技巧和注意事项,需要的朋友参考一下 首先给大家介绍JavaScript中function定义函数的几种方法: 1.最基本的作为一个本本分分的函数声明使用。 或 2.作为一个类构造器使用: 3.作为闭包使用: 4.可以作为选择器使用: 5.以上四中情况的混合应用: JavaScript
本文向大家介绍Javascript函数的参数,包括了Javascript函数的参数的使用技巧和注意事项,需要的朋友参考一下 本文是金旭亮老师网易云课堂的课程笔记,记录下来,以供备忘 函数的参数 对于参数值,JavaScript不会进行类型检查,任何类型的值都可以被传递给参数。 对于函数参数,如果过少,没得到值的参数值为undefi