:: Visual Foxpro, Foxpro for DOS
SHA512 в фоксе
Пашок
Автор

Сообщений: 706
Дата регистрации: 14.11.2001
Можете подсказать или пример показать, как можно вызвать данный вид шифрования в фоксе ?


------------------
Ratings: 0 negative/0 positive
Re: SHA512 в фоксе
ssa

Сообщений: 12999
Откуда: Москва
Дата регистрации: 23.03.2005
Пашок
Можете подсказать или пример показать, как можно вызвать данный вид шифрования в фоксе ?
Что бы что-то вызвать, надо это что-то хотя бы иметь.

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: SHA512 в фоксе
DmGr

Сообщений: 850
Дата регистрации: 21.01.2002
Рыть в эту сторону msdn.microsoft.com
Или эту www.openssl.org
Ratings: 0 negative/0 positive
Re: SHA512 в фоксе
_vit

Сообщений: 5173
Дата регистрации: 29.07.2002
SHA512 это алгориттм хэширования а не шифрования.
В фоксе можно использовать CAPICOM можно Crypto API.

C CAPICOM проще.

#define CAPICOM_HASH_ALGORITHM_SHA_512 6
oHash = CREATEOBJECT('CAPICOM.HashedData')
oHash.Algorithm = CAPICOM_HASH_ALGORITHM_SHA_512
? oHash.Hash("Test string that contains the value to hash.")
? oHash.Value
oHash=.null.

Crypto API - смотри библиотеку _crypt.vcx что поставляется с фоксом начиная с седьмой версии.
Ratings: 0 negative/0 positive
Re: SHA512 в фоксе
JS

Сообщений: 12264
Откуда: Эстония
Дата регистрации: 04.09.2000
_vit
SHA512 это алгориттм хэширования а не шифрования.
В фоксе можно использовать CAPICOM можно Crypto API.
C CAPICOM проще.

Пару месяцев назад прокололся с CAPICOM при переносе приложения на Windows 7,
на которой он уже не поддерживается.
Можно попробовать запускать приложение в ХР совместимом режиме.


------------------
Knowledge is better than ignorance!
Website: juri.foxhelp.eu
Ratings: 0 negative/0 positive
Re: SHA512 в фоксе
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
JS
Пару месяцев назад прокололся с CAPICOM при переносе приложения на Windows 7,
на которой он уже не поддерживается.

Опаньки, Юр а какой выход кроме эмуляции XP.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: SHA512 в фоксе
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Режим совместимости с XP <> "эмуляции XP".
А выход - использовать CryptoAPI, или, как того страстно желает MS, с песнями и плясками переходить на дотнет.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: SHA512 в фоксе
_vit

Сообщений: 5173
Дата регистрации: 29.07.2002
JS
_vit
SHA512 это алгориттм хэширования а не шифрования.
В фоксе можно использовать CAPICOM можно Crypto API.
C CAPICOM проще.

Пару месяцев назад прокололся с CAPICOM при переносе приложения на Windows 7,
на которой он уже не поддерживается.
Можно попробовать запускать приложение в ХР совместимом режиме.

Сам-то я не пробовал но я так понял, что у чека получилось поставить CAPICOM на семерку.
forum.kontur-extern.ru
Ratings: 0 negative/0 positive
Re: SHA512 в фоксе
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Собственно говоря, "не поддерживается" <> "не работает". По-моему даже тут мы обсуждали этот вопрос более подробно...


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: SHA512 в фоксе
_vit

Сообщений: 5173
Дата регистрации: 29.07.2002
Извиняйте меня балбеса, что не так все понял.
Раз CAPICOM на семерке работает без проблем
то я пошел спать со спокойной душой.
Ratings: 0 negative/0 positive
Re: SHA512 в фоксе
Sega

Сообщений: 511
Откуда: Ярославль
Дата регистрации: 27.12.2000
Не буду создавать новую тему, а продолжу эту.

Возникла необходимость хэширования строки по SHA512.
Пример _vit'a смотрел. Всё хорошо, но для этого у каждого пользователя нужно запускать установку CAPICOM'a, а это в моем случае невыполнимо. Тут случайно попалась статья с кодом из 1С. Из чего была сделана реализация на VFP.
Кому нужно - пользуйтесь:

lcParam="Эту строку тестируем"
?SHA512(lcParam)
**************************************************
FUNCTION SHA512
* Get SHA512 string
**************************************************
LPARAMETERS lStr
TEXT TO sScript NOSHOW
function SHA512(str) {
function int64(msint_32, lsint_32) {
this.highOrder = msint_32;
this.lowOrder = lsint_32;
}
var H = [new int64(0x6a09e667, 0xf3bcc908), new int64(0xbb67ae85, 0x84caa73b),
new int64(0x3c6ef372, 0xfe94f82b), new int64(0xa54ff53a, 0x5f1d36f1),
new int64(0x510e527f, 0xade682d1), new int64(0x9b05688c, 0x2b3e6c1f),
new int64(0x1f83d9ab, 0xfb41bd6b), new int64(0x5be0cd19, 0x137e2179)];
var K = [new int64(0x428a2f98, 0xd728ae22), new int64(0x71374491, 0x23ef65cd),
new int64(0xb5c0fbcf, 0xec4d3b2f), new int64(0xe9b5dba5, 0x8189dbbc),
new int64(0x3956c25b, 0xf348b538), new int64(0x59f111f1, 0xb605d019),
new int64(0x923f82a4, 0xaf194f9b), new int64(0xab1c5ed5, 0xda6d8118),
new int64(0xd807aa98, 0xa3030242), new int64(0x12835b01, 0x45706fbe),
new int64(0x243185be, 0x4ee4b28c), new int64(0x550c7dc3, 0xd5ffb4e2),
new int64(0x72be5d74, 0xf27b896f), new int64(0x80deb1fe, 0x3b1696b1),
new int64(0x9bdc06a7, 0x25c71235), new int64(0xc19bf174, 0xcf692694),
new int64(0xe49b69c1, 0x9ef14ad2), new int64(0xefbe4786, 0x384f25e3),
new int64(0x0fc19dc6, 0x8b8cd5b5), new int64(0x240ca1cc, 0x77ac9c65),
new int64(0x2de92c6f, 0x592b0275), new int64(0x4a7484aa, 0x6ea6e483),
new int64(0x5cb0a9dc, 0xbd41fbd4), new int64(0x76f988da, 0x831153b5),
new int64(0x983e5152, 0xee66dfab), new int64(0xa831c66d, 0x2db43210),
new int64(0xb00327c8, 0x98fb213f), new int64(0xbf597fc7, 0xbeef0ee4),
new int64(0xc6e00bf3, 0x3da88fc2), new int64(0xd5a79147, 0x930aa725),
new int64(0x06ca6351, 0xe003826f), new int64(0x14292967, 0x0a0e6e70),
new int64(0x27b70a85, 0x46d22ffc), new int64(0x2e1b2138, 0x5c26c926),
new int64(0x4d2c6dfc, 0x5ac42aed), new int64(0x53380d13, 0x9d95b3df),
new int64(0x650a7354, 0x8baf63de), new int64(0x766a0abb, 0x3c77b2a8),
new int64(0x81c2c92e, 0x47edaee6), new int64(0x92722c85, 0x1482353b),
new int64(0xa2bfe8a1, 0x4cf10364), new int64(0xa81a664b, 0xbc423001),
new int64(0xc24b8b70, 0xd0f89791), new int64(0xc76c51a3, 0x0654be30),
new int64(0xd192e819, 0xd6ef5218), new int64(0xd6990624, 0x5565a910),
new int64(0xf40e3585, 0x5771202a), new int64(0x106aa070, 0x32bbd1b8),
new int64(0x19a4c116, 0xb8d2d0c8), new int64(0x1e376c08, 0x5141ab53),
new int64(0x2748774c, 0xdf8eeb99), new int64(0x34b0bcb5, 0xe19b48a8),
new int64(0x391c0cb3, 0xc5c95a63), new int64(0x4ed8aa4a, 0xe3418acb),
new int64(0x5b9cca4f, 0x7763e373), new int64(0x682e6ff3, 0xd6b2b8a3),
new int64(0x748f82ee, 0x5defb2fc), new int64(0x78a5636f, 0x43172f60),
new int64(0x84c87814, 0xa1f0ab72), new int64(0x8cc70208, 0x1a6439ec),
new int64(0x90befffa, 0x23631e28), new int64(0xa4506ceb, 0xde82bde9),
new int64(0xbef9a3f7, 0xb2c67915), new int64(0xc67178f2, 0xe372532b),
new int64(0xca273ece, 0xea26619c), new int64(0xd186b8c7, 0x21c0c207),
new int64(0xeada7dd6, 0xcde0eb1e), new int64(0xf57d4f7f, 0xee6ed178),
new int64(0x06f067aa, 0x72176fba), new int64(0x0a637dc5, 0xa2c898a6),
new int64(0x113f9804, 0xbef90dae), new int64(0x1b710b35, 0x131c471b),
new int64(0x28db77f5, 0x23047d84), new int64(0x32caab7b, 0x40c72493),
new int64(0x3c9ebe0a, 0x15c9bebc), new int64(0x431d67c4, 0x9c100d4c),
new int64(0x4cc5d4be, 0xcb3e42b6), new int64(0x597f299c, 0xfc657e2a),
new int64(0x5fcb6fab, 0x3ad6faec), new int64(0x6c44198c, 0x4a475817)];
var W = new Array(64);
var a, b, c, d, e, f, g, h, i, j;
var T1, T2;
var charsize = 8;
function utf8_encode(str) {
return unescape(encodeURIComponent(str));
}
function str2binb(str) {
var bin = [];
var mask = (1 << charsize) - 1;
var len = str.length * charsize;
for (var i = 0; i < len; i += charsize) {
bin[i >> 5] |= (str.charCodeAt(i / charsize) & mask) << (32 - charsize - (i % 32));
}
return bin;
}
function binb2hex(binarray) {
var hex_tab = "0123456789abcdef";
var str = "";
var length = binarray.length * 4;
var srcByte;
for (var i = 0; i < length; i += 1) {
srcByte = binarray[i >> 2] >> ((3 - (i % 4)) * 8);
str += hex_tab.charAt((srcByte >> 4) & 0xF) + hex_tab.charAt(srcByte & 0xF);
}
return str;
}
function safe_add_2(x, y) {
var lsw, msw, lowOrder, highOrder;
lsw = (x.lowOrder & 0xFFFF) + (y.lowOrder & 0xFFFF);
msw = (x.lowOrder >>> 16) + (y.lowOrder >>> 16) + (lsw >>> 16);
lowOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
lsw = (x.highOrder & 0xFFFF) + (y.highOrder & 0xFFFF) + (msw >>> 16);
msw = (x.highOrder >>> 16) + (y.highOrder >>> 16) + (lsw >>> 16);
highOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
return new int64(highOrder, lowOrder);
}
function safe_add_4(a, b, c, d) {
var lsw, msw, lowOrder, highOrder;
lsw = (a.lowOrder & 0xFFFF) + (b.lowOrder & 0xFFFF) + (c.lowOrder & 0xFFFF) + (d.lowOrder & 0xFFFF);
msw = (a.lowOrder >>> 16) + (b.lowOrder >>> 16) + (c.lowOrder >>> 16) + (d.lowOrder >>> 16) + (lsw >>> 16);
lowOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
lsw = (a.highOrder & 0xFFFF) + (b.highOrder & 0xFFFF) + (c.highOrder & 0xFFFF) + (d.highOrder & 0xFFFF) + (msw >>> 16);
msw = (a.highOrder >>> 16) + (b.highOrder >>> 16) + (c.highOrder >>> 16) + (d.highOrder >>> 16) + (lsw >>> 16);
highOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
return new int64(highOrder, lowOrder);
}
function safe_add_5(a, b, c, d, e) {
var lsw, msw, lowOrder, highOrder;
lsw = (a.lowOrder & 0xFFFF) + (b.lowOrder & 0xFFFF) + (c.lowOrder & 0xFFFF) + (d.lowOrder & 0xFFFF) + (e.lowOrder & 0xFFFF);
msw = (a.lowOrder >>> 16) + (b.lowOrder >>> 16) + (c.lowOrder >>> 16) + (d.lowOrder >>> 16) + (e.lowOrder >>> 16) + (lsw >>> 16);
lowOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
lsw = (a.highOrder & 0xFFFF) + (b.highOrder & 0xFFFF) + (c.highOrder & 0xFFFF) + (d.highOrder & 0xFFFF) + (e.highOrder & 0xFFFF) + (msw >>> 16);
msw = (a.highOrder >>> 16) + (b.highOrder >>> 16) + (c.highOrder >>> 16) + (d.highOrder >>> 16) + (e.highOrder >>> 16) + (lsw >>> 16);
highOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
return new int64(highOrder, lowOrder);
}
function maj(x, y, z) {
return new int64(
(x.highOrder & y.highOrder) ^ (x.highOrder & z.highOrder) ^ (y.highOrder & z.highOrder),
(x.lowOrder & y.lowOrder) ^ (x.lowOrder & z.lowOrder) ^ (y.lowOrder & z.lowOrder)
);
}
function ch(x, y, z) {
return new int64(
(x.highOrder & y.highOrder) ^ (~x.highOrder & z.highOrder),
(x.lowOrder & y.lowOrder) ^ (~x.lowOrder & z.lowOrder)
);
}
function rotr(x, n) {
if (n <= 32) {
return new int64(
(x.highOrder >>> n) | (x.lowOrder << (32 - n)),
(x.lowOrder >>> n) | (x.highOrder << (32 - n))
);
} else {
return new int64(
(x.lowOrder >>> n) | (x.highOrder << (32 - n)),
(x.highOrder >>> n) | (x.lowOrder << (32 - n))
);
}
}
function sigma0(x) {
var rotr28 = rotr(x, 28);
var rotr34 = rotr(x, 34);
var rotr39 = rotr(x, 39);
return new int64(
rotr28.highOrder ^ rotr34.highOrder ^ rotr39.highOrder,
rotr28.lowOrder ^ rotr34.lowOrder ^ rotr39.lowOrder
);
}
function sigma1(x) {
var rotr14 = rotr(x, 14);
var rotr18 = rotr(x, 18);
var rotr41 = rotr(x, 41);
return new int64(
rotr14.highOrder ^ rotr18.highOrder ^ rotr41.highOrder,
rotr14.lowOrder ^ rotr18.lowOrder ^ rotr41.lowOrder
);
}
function gamma0(x) {
var rotr1 = rotr(x, 1), rotr8 = rotr(x, 8), shr7 = shr(x, 7);
return new int64(
rotr1.highOrder ^ rotr8.highOrder ^ shr7.highOrder,
rotr1.lowOrder ^ rotr8.lowOrder ^ shr7.lowOrder
);
}
function gamma1(x) {
var rotr19 = rotr(x, 19);
var rotr61 = rotr(x, 61);
var shr6 = shr(x, 6);
return new int64(
rotr19.highOrder ^ rotr61.highOrder ^ shr6.highOrder,
rotr19.lowOrder ^ rotr61.lowOrder ^ shr6.lowOrder
);
}
function shr(x, n) {
if (n <= 32) {
return new int64(
x.highOrder >>> n,
x.lowOrder >>> n | (x.highOrder << (32 - n))
);
} else {
return new int64(
0,
x.highOrder << (32 - n)
);
}
}
str = utf8_encode(str);
strlen = str.length*charsize;
str = str2binb(str);
str[strlen >> 5] |= 0x80 << (24 - strlen % 32);
str[(((strlen + 128) >> 10) << 5) + 31] = strlen;
for (var i = 0; i < str.length; i += 32) {
a = H[0];
b = H[1];
c = H[2];
d = H[3];
e = H[4];
f = H[5];
g = H[6];
h = H[7];
for (var j = 0; j < 80; j++) {
if (j < 16) {
W[j] = new int64(str[j*2 + i], str[j*2 + i + 1]);
} else {
W[j] = safe_add_4(gamma1(W[j - 2]), W[j - 7], gamma0(W[j - 15]), W[j - 16]);
}
T1 = safe_add_5(h, sigma1(e), ch(e, f, g), K[j], W[j]);
T2 = safe_add_2(sigma0(a), maj(a, b, c));
h = g;
g = f;
f = e;
e = safe_add_2(d, T1);
d = c;
c = b;
b = a;
a = safe_add_2(T1, T2);
}
H[0] = safe_add_2(a, H[0]);
H[1] = safe_add_2(b, H[1]);
H[2] = safe_add_2(c, H[2]);
H[3] = safe_add_2(d, H[3]);
H[4] = safe_add_2(e, H[4]);
H[5] = safe_add_2(f, H[5]);
H[6] = safe_add_2(g, H[6]);
H[7] = safe_add_2(h, H[7]);
}
var binarray = [];
for (var i = 0; i < H.length; i++) {
binarray.push(H[i].highOrder);
binarray.push(H[i].lowOrder);
}
return binb2hex(binarray);
}
ENDTEXT
ScrptCtrl = CreateObject("MSScriptControl.ScriptControl")
ScrptCtrl.Language = "JScript"
ScrptCtrl.AddCode(sScript)
nHash = ScrptCtrl.Run("SHA512", lStr)
RELEASE ScrptCtrl
RETURN nHash
Ratings: 0 negative/1 positive
Re: SHA512 в фоксе
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Ужоснах - из фокса генерить и исполнять JS
Можно использовать КриптоАПИ БЕЗ установки COM-помощника CAPICOM (вызовы там несложные - примеры есть), можно взять на си написанную dll...
forum.foxclub.ru


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: SHA512 в фоксе
Sega

Сообщений: 511
Откуда: Ярославль
Дата регистрации: 27.12.2000
Подниму старую тему вычисления хэш-суммы.
Нашел на форуме 1с вот такую процедурку

// Вычисление хэш-суммы по алгоритму SHA-512.
//
// Параметры:
// Строка - строка, строка для которой вычисляется хэш-сумма.
//
Функция ВычислитьХешСтрокиПоАлгоритмуSHA512(Знач Строка) Экспорт
Попытка
// Вычисление хэш-суммы.
UTF8Encoding = Новый COMОбъект("System.Text.UTF8Encoding");
SHA512Managed = Новый COMОбъект("System.Security.Cryptography.SHA512Managed");
МассивБайтов = SHA512Managed.ComputeHash_2(UTF8Encoding.GetBytes_4(Строка));
// Преобразование хэш-суммы в строку.
StringBuilder = Новый COMОбъект("System.Text.StringBuilder");
Для Каждого Элемент Из МассивБайтов Цикл
StringBuilder.AppendFormat("{0:x2}", Элемент);
КонецЦикла;
Возврат StringBuilder.ToString();
Исключение
ВызватьИсключение "Ошибка вычисления хэш-суммы по алгоритму SHA-512!
|Попробуйте установить/обновить "".NET Framework"".";
КонецПопытки;
КонецФункции // ВычислитьХешСтрокиПоАлгоритмуSHA512()

Переложил её на VFP/ Получилось вот так:
FUNCTION SHA512
LPARAMETERS lcStr
TRY
loUTF8Encoding = CREATEOBJECT( "System.Text.UTF8Encoding")
loSHA512Managed = CREATEOBJECT("System.Security.Cryptography.SHA512Managed")
cStr8=loUTF8Encoding.GetBytes_4(lcStr)
oStringBytes = loSHA512Managed.ComputeHash_2(cStr8)
loStringBuilder = CREATEOBJECT("System.Text.StringBuilder")
FOR EACH oElement IN oStringBytes
loStringBuilder.AppendFormat("{0:x2}", oElement)
ENDFOR
nHash=StringBuilder.ToString()
CATCH
nHash=0
MESSAGEBOX('Ошибка вычисления хэш-суммы по алгоритму SHA-512!'+CHR(13)+'Попробуйте установить/обновить ".NET Framework".',16,"Ошибка")
ENDTRY
RETURN nHash

Спотыкается на строке
oStringBytes = loSHA512Managed.ComputeHash_2(cStr8)

Что только не перепробовал делать. Почитал MSDN. Есть сомнения по поводу того, что в вызов ComputeHash_2 передаю параметры неправильно.
Что делаю не так?
Ratings: 0 negative/0 positive
Re: SHA512 в фоксе
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
Sega
Есть сомнения по поводу того, что в вызов ComputeHash_2 передаю параметры неправильно.
Что делаю не так?

По идее:
Цитата:
МассивБайтов = SHA512Managed.ComputeHash_2(UTF8Encoding.GetBytes_4(Строка));
массив, а не строка.

Т.е.
Цитата:
cStr8=loUTF8Encoding.GetBytes_4(lcStr)
может быть надо сначала объявить именно как массив.

Возможно из-за этого функция
Цитата:
oStringBytes = loSHA512Managed.ComputeHash_2(cStr8)
его и не воспринимает.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: SHA512 в фоксе
Артём

Сообщений: 116
Дата регистрации: 23.04.2001
Скачиваем файл vfpincryption71.fll у меня размер 148 кБ

github.com

DECLARE INTEGER HMAC IN vfpincryption71.fll;
STRING lpszParam1,;
STRING lpszParam2,;
INTEGER hParam3

Дальше для Yobit типа того
param00 = 'nonce='+sNonce+'&method=getInfo'
sAnsw = LOWER( STRCONV( HMAC( param00, API_SECRET_INFO, 4), 15))
header00 = 'KEY:'+API_KEY_INFO+CHR(13)+CHR(10)+'Sign:'+ sAnsw + CHR(13)+CHR(10)

з.ы.
для проверки правильности шифрования я использовал bablofil.ru
загрузить и установить питон - фигня по сравнению с изучением алгоритма шифрования



Исправлено 3 раз(а). Последнее : Артём, 14.11.19 02:45
Ratings: 0 negative/0 positive
Re: SHA512 в фоксе
_vit

Сообщений: 5173
Дата регистрации: 29.07.2002
фокс не умеет автоматически маршалить ни один из своих типов в нетовский массив байтов.
Нужно поприседать с бубном.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 30 (Гостей: 30)

© 2000-2024 Fox Club 
Яндекс.Метрика