上下文:我正在实现一个SHA-256散列到Lotusscript。
哈希在32位上工作。LotusScript只有签署了 Long。当结果大于2,147,483,647时,得到溢出。
问:如何关闭溢出检测长时间的?
如果不可能的话,这里有工作吗?我在想理查德·施瓦茨( Richard )在http://femkegoedhart.com/2012/02/05/lotusscript-timedifference-long-data-type-grrr/中拥有的wroten,我怎么能用NotesDateTime来帮助解决我的问题呢?
我是否应该“忘记这一点”,然后如何在Lotusscript中散列(好吧,我可以考虑使用LS2J并使用标准的java 256)
当然,如果有SHA-256的LS实现,这也是一个很好的响应:-)
谢谢你的帮助,我觉得有点迷茫..。
守则的一部分:
Dim T1 As Long
Dim h2 As Long
Dim Sigma1 As Long
Dim K_t As Long
h2=1541459225
Sigma1 = 21895337
K_t=1116352408
MsgBox String(32-Len(Bin$(h2)),"0")+Bin$(h2)+" " +"Bin$(h2)"+Chr$(13)+ _
String(32-Len(Bin$(Sigma1)),"0")+Bin$(Sigma1)+" " +"Bin$(Sigma1)"+Chr$(13)+ _
String(32-Len(Bin$(K_t)),"0")+Bin$(K_t)+" " +"Bin$(K_t)",,"DEBUG"
T1 = h2 + Sigma1
MsgBox "T1 = " & T1 & " binary representation:" + String(32-Len(Bin$(T1)),"0")+ Bin$(T1)
T1 = h2 + Sigma1 + K_t ' **this line cause overflow**
MsgBox "T1 = " & T1 & " binary representation:" + String(32-Len(Bin$(T1)),"0")+ Bin$(T1)注:我的实现是基于克里斯·维内斯的工作:http://www.movable-type.co.uk/scripts/sha256.html
发布于 2013-10-21 08:02:38
不能在LotusScript中关闭LONG上的溢出检测。此外,BIN()函数上面的示例将尝试转换为long,因此排除了使用DOUBLE的可能性。
dateTime对象,虽然它将数字处理为长无符号,但它可能有点骇人听闻。
就我个人而言,我建议创建一个小的C DLL来完成这项工作,并将其作为字符串传回。
或者用Java创建代码,因为它没有LS所具有的相同的限制。
发布于 2013-10-23 15:09:31
正如Simon‘’Doherty回答的那样,无法在LotusScript.中关闭溢出检测。
我抛弃了这条路..。现在(也许有一天我会做另一次尝试。)弗兰蒂塞克·科苏斯,你的权利我需要从变量限制开始.这是最棘手的部分)
谢谢你的帮忙!
*西蒙:我希望做LS2J而不是DLL!
我加入了java中非常简单的类:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class SHA256 {
public String sha256(String message) throws NoSuchAlgorithmException {
MessageDigest md1 = MessageDigest.getInstance("SHA-256");
String resu = A9Utility.bytesToHex(md1.digest(message.getBytes()));
System.out.println("here SHA256: resu ="+resu);
return resu;
}
}对于A9Utility.bytesToHex,我使用了https://code.google.com/p/a9cipher/source/browse/src/cosc385final/A9Utility.java
所以我在LS的电话是:
UseLSX "*javacon"
Use "SHA256"
[...]
Dim mySession As JavaSession
Dim myClass As JavaClass
Dim myObject As JavaObject
Set mySession = New JavaSession()
Set myClass = mySession.GetClass("SHA256")
Set myObject = myClass.CreateObject()
Dim resu As String
resu = myObject.sha256(message)发布于 2016-12-04 18:25:00
您可以在LS中使用COM组件并调用它。有许多经过充分开发和验证的SHA-256 (和其他散列) COM组件。
如果遵循此路径,则需要将返回值“处理”为字符串或其他二进制编码(base64?)结果可能(或不可能)需要未签名的多头持有原始值。这些组件中的大多数都提供了执行此操作的方法。
对于今天的应用程序来说有点“老式”,但是嘿,你使用的是LS,所以也许这不是什么问题。
https://stackoverflow.com/questions/19487308
复制相似问题