1

コンテキスト: Lotusscript に SHA-256 ハッシュを実装しています。

ハッシュは 32 ビットで動作します。LotusScript はLongのみに署名しています。結果が 2,147,483,647 より大きい場合、overflow が発生します。

質問: Longのオーバーフロー検出をオフにする方法は?

不可能な場合、回避策はありますか? Richard Schwartzhttp://femkegoedhart.com/2012/02/05/lotusscript-timedifference-long-data-type-grrr/に書いていることを考えていたのですが、NotesDateTime を使用して問題を回避するにはどうすればよいでしょうか?

「これを忘れる」必要がありますが、Lotusscript でハッシュする方法 (わかりました、LS2J を使用し、標準の Java SHA 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)

注: 実装はChris Venessの作業に基づいています: http://www.movable-type.co.uk/scripts/sha256.html

4

3 に答える 3

0

Simon O'Doherty が答えたように、LotusScript で LONG のオーバーフロー検出をオフにする方法はありません。

私は LS の方法を放棄します... とりあえず (いつか別の試みをするかもしれません. Frantisek Kossuth、私は最初から変数の制限を取る必要があるあなたの権利... ここでトリッキーな部分です)

ご協力いただきありがとうございます!

*Simon: 私は DLL よりも LS2J の方が好きです!

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)
于 2013-10-23T15:09:31.487 に答える
0

LS で COM コンポーネントを使用して呼び出すことができます。十分に開発され、実績のある SHA-256 (およびその他のハッシュ) COM コンポーネントが多数あります。

このルートに従う場合、戻り値を文字列またはその他のバイナリ エンコーディング (base64?) として「処理」する必要があります。これは、結果が生の値を保持するために unsigned long を必要とする (または必要としない) 場合があるためです。これらのコンポーネントのほとんどは、これを行うためのメソッドを提供します。

今日のアプリでは少し「時代遅れ」ですが、LS を使用しているので、問題ないかもしれません。

于 2016-12-04T18:25:00.447 に答える