我使用Haskell编写了一个Java字节码解析器,它运行得很好.然而,下一步让我完全难过.
我的Haskell程序需要修改.class文件,以便在执行时,Java程序打印:
" 在执行方法之前输入[此处的方法名称] ",和
执行方法后" 退出[此处的方法名称] ".
我所知道的是,我们需要在调用时附加常量池和方法表System.out.println,但我觉得我仍然缺少某些东西.
System.out.println字节码? System.out.println?我创建了一个数据库引擎,我可以在其中创建和修改表,并将它们添加到数据库中.为了解析SQL查询,我使用EBNF表单实现了Boost.Spirit库.我正确设置了解析器,并成功解析了每个规则.
我的问题是我现在不知道如何整合这两者.Boost.Spirit解析器只验证输入是否正确,但我需要它来实际执行某些操作.我查找了语义操作,但它们似乎没有处理我正在寻找的内容.
例如,如果我有一个查询,例如:
new_table <- SELECT (id < 5) old_table;
我希望它使用规则验证输入,然后调用函数
Table Database::Select(Table t , Condition c){ ... }
并将标记作为参数传递.
我如何整合解析器?
可能是一个超级基本的问题.我知道许多在线服务哈希和盐密码,而不是出于安全目的将它们存储为明文.我大学的门户网站要求学生每6个月更改一次密码.据我所知,该系统建立在Oracle软件之上.
我的问题是,系统如何知道我的20个字符的长密码(带有大写字母,数字和符号)何时包含3个字符,其顺序与我想要设置的新密码相同?如果密码是哈希值,算法不应该是单向的吗?或者系统是否可以加密明文密码并存储它们?那会不那么安全吗?
对不起,如果这个问题很难理解.如果您需要我澄清,请告诉我.提前致谢!
我记得听说使用SHA-1发现了一些弱点,因此在给定输出散列的情况下更容易找到明文输入.我也知道MD5已被确定为某些应用程序的弱点.我正在尝试创建一个程序来演示两种方法的不同复杂性:用于查找输入的强力搜索,以及利用SHA-1或MD5中的弱点来查找输入.
明文输入的长度<4,仅由AZ组成,因此蛮力并非不切实际.
我的问题是:
是否有通过利用弱点来反转SHA-1的C/C++实现?
是否有通过利用弱点来反转MD5的C/C++实现?
我目前的感觉是,任何利用弱点的方法都不会在时间复杂性上有足够的差异来证明这么小的样本量的好处.