• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

функция расчёта Crc 32

  • Автор темы Gor
  • Дата начала
G

Gor

Всем доброго времени суток!

Кто нибудь писал функцию расчёта CRC 32 кода на LS ??
Может кто нибудь поделится?)) Не хочется изобретать велосипед((

Я честно говоря даже с алгоритмом плохо знаком...
спасибо
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
178
вот и не изобретайте :(
берите LS2J бридж и вперед:
 
G

Gor

Спасибо) действительно работает)
 
G

Gor

вот и не изобретайте
берите LS2J бридж и вперед:
]]>http://noteslog.com/post/crc32/]]>

Что то я поторопился=) Обрадовался что проблема решена подключил библиотеку, стал суммровать свои строки и подставлять в функцию расчёта StringCRC32

Код:
Option Public
Option Declare

Use "CRC32 Java"
Uselsx "*javacon"

Function StringCRC32( aString As String ) As String
Dim jSession As JavaSession
Set jSession = New JavaSession
Dim jClass As JavaClass
Set jClass = jSession.GetClass( "StringCRC32" )
StringCRC32 = jClass.StringCRC32( aString )
End Function

Я так понимаю что функция StringCRC32 мне всегда выдаёт десятичное число....

Вот что я пытаюсь сделать в своём куске кода (результат возвращаемой мне функции перевести в к 16-тиричному виду)
Код:
	Dim aString As String
aString = doc.CF_USD(0) & sAccount & doc.CF_RUB(0) & rate

hashtext = StringCRC32(aString)

Print #idfile, "CRC32: "Hex(hashtext)";"

На строчке Print #idfile, "CRC32: "Hex(hashtext)";" выдаёт ошибку - Overflow....
hashtext у меня = "2833674775"
Вообще функция StringCRC32 всё время выдаёт разные 10-тизначные числа, на разные входные значения...
Я и непойму что это за такое десятизначные числа которые она мне возвращает, поэтому решил результат переводить к 16-ричному значению что приводит к такой оошибке)))

ПОдскажите в чём проблема...?
 
G

Gor

Ну а если несколько по другому вопрос поставлю)

Почему не работает конструкция типа

hashtext = "2833674775"
s = Hex$(hashtext)

Ошибка - Overflow
Хотя в калькуляторе десятичное число 2833674775 переводится в шестнадцатиричное легко - A8E67217

Не работает функция Hex$?
 
M

morpheus

Gor
судя по хэлпу, просто напросто слишком большое число

HEX принимает Long или Integer
If the data type of numExpr is not Integer or Long, LotusScript attempts to convert it to a Long. If it cannot be converted, an error occurs.

ну а Long соответственно
A Long value is a whole number in the range -2,147,483,648 to 2,147,483,647 inclusive.
 
A

Akupaka

вспоминаем школьную информатику и пишем каркулятор :)
либо ищем подобную функцию на java и используем тот же бридж!
 
G

Gor

Код:
A Long value is a whole number in the range -2,147,483,648 to 2,147,483,647 inclusive.

=(((((
т.е. если у меня число предположим 2,547,483,647 и оно > 2,147,483,647 то функция Hex$ ругаться будет?!
А почему так несправедливо??? Это же не означает что у числа 2,547,483,647 нет шестнадцатиричного вида!!!
=((
ну видимо только остаётся искать функцию на яве,
а на яве функцию перевода в шестнадцатиричную систему счисления никто не встречал?
надеюсь там ограничений таких нет...
Ну либо действительно свой калькулятор делать=)
 
G

Gor

В общем решил заменой строчки в Java функции

Код:
import java.util.zip.CRC32;

public class StringCRC32 {

public static String StringCRC32 ( String s )
{
byte[] b = s.getBytes();

CRC32 crc = new CRC32();

for ( int i=0; i<b.length; i++ )
{
crc.update( b[i] );
}

return Long.toHexString(crc.getValue()); 
}

}

Считает и переводит в шестнадцатиричную систему правильно.
 
A

Akupaka

не забудь только проверить до каких значений числа :)
 
30.05.2006
1 345
12
BIT
0
CRC32 возвращает не integer*4, а скорее Cardinal*4 Т.е. беззнаковое.
В LS беззнакового integer нету. Поэтому когда движок распознает присвоение положительного числа более 2^31, он ругается.
WorkAround - юзайте тип Currency
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
178
вот вам склад великов
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!