Проблемы с вычисление хэша.

M234
Дата: 11.05.2006 20:52:18
Пожалуйста пройдите по следующему линку.
Я понимаю что это кросспостинг, но помощь сильно нужна и варианты собственные уже иссякли.
"Так просто нельзя - надо знать" (с) х/ф Кин-дза-дза.

http://www.sql.ru/forum/actualthread.aspx?tid=292210
M234
Дата: 12.05.2006 12:47:00
Для строки: "Полсотни лет.doc" ( без кавычек)
ASP генерит хэш:

e9cbdc4e66908a4ba2cddceceda020550afc46a6fd5ee336d4493e593b39a67c

А ASP.NET :

6f0fbc3f150e26de173eefc571fc41b777c6ac5b2f85cd0361684df5874b47bf

И как я тока не пытался в каких только кодировках - не могу в .NET получить такой хэш. Я не знаю на базе чего это генерится...
Andres 1
Дата: 12.05.2006 14:48:36
M234
Я не знаю на базе чего это генерится...

Как же "не знаю"???
А кто это написал???

M234

byte[] ContentBytes = System.Text.Encoding.UTF8.GetBytes(FName);


В вашем коде asp, кажется, никакого преобразования в utf-8 нет. Т.е. doc.Fields.Item("doc_data_name").value - строка либо в cp1251, либо в 16-бит юникод. Но никоим образом не utf-8.
M234
Дата: 12.05.2006 16:57:26
Так тоже не выходит.

   byte[] ContentBytes = System.Text.Encoding.GetEncoding(1251).GetBytes(FName);
   byte[] ContentBytes = System.Text.Encoding.Unicode.GetBytes(FName);
Andres 1
Дата: 12.05.2006 17:00:47
M234
Так тоже не выходит.

   byte[] ContentBytes = System.Text.Encoding.GetEncoding(1251).GetBytes(FName);
   byte[] ContentBytes = System.Text.Encoding.Unicode.GetBytes(FName);

Т.к. asp никогда не занимался, то не знаю - возможно ли такое - но посоветую попытаться записать содержимое doc.Fields.Item("doc_data_name").value в файл на диске, а потом просто посмотреть глазами - что же там за кодировка.
Ну или вывести hex-dump этого value на страницу.
Andres 1
Дата: 12.05.2006 17:03:43
Andres 1
M234
Так тоже не выходит.

   byte[] ContentBytes = System.Text.Encoding.GetEncoding(1251).GetBytes(FName);
   byte[] ContentBytes = System.Text.Encoding.Unicode.GetBytes(FName);

Т.к. asp никогда не занимался, то не знаю - возможно ли такое - но посоветую попытаться записать содержимое doc.Fields.Item("doc_data_name").value в файл на диске, а потом просто посмотреть глазами - что же там за кодировка.
Ну или вывести hex-dump этого value на страницу.

Еще один вопрос. asp - это что-то вроде VB6? Как там переменные типа вариант хранились в памяти?
Т.к. это - doc.Fields.Item("doc_data_name").value - очень похоже на variant, и никак не на string или byte[].
M234
Дата: 12.05.2006 17:24:49
Andres 1

Т.к. asp никогда не занимался, то не знаю - возможно ли такое - но посоветую попытаться записать содержимое doc.Fields.Item("doc_data_name").value в файл на диске, а потом просто посмотреть глазами - что же там за кодировка.
Ну или вывести hex-dump этого value на страницу.


При первой попытки скрипт выпал в осадок.
Только после того как я сказал открыть файл для записи в Unicode он мне туда всё как надо записал.
А именно : "Полсотни лет.doc"
Но что это за юникод ? и почему в .net никакие варианты не проходят ?
M234
Дата: 12.05.2006 17:37:04
Andres 1

Еще один вопрос. asp - это что-то вроде VB6? Как там переменные типа вариант хранились в памяти?
Т.к. это - doc.Fields.Item("doc_data_name").value - очень похоже на variant, и никак не на string или byte[].


Ага, это VBScript = кастрированный VB.

Может и variant, я тож не знаю что находится в doc.Fields.Item("doc_data_name").value , но явное приведение к строковому типу не меняет НИЧЕГО и на хэш не влияет.
M234
Дата: 12.05.2006 17:48:50
Итак, то что находится в файле было распознано как UTF-16 little-indien
Теперь как правильный хэш получить ?
Чего и куда мне надо перекодировать. Совсем запутался.
M234
Дата: 12.05.2006 17:58:57
byte[] ContentBytes = System.Text.Encoding.Unicode.GetBytes(FName);

Вот так не проходит. хэш не тот генерится.


И ещё есть подозрение, что вот тут

string FName = NameReader["doc_data_name"].ToString();

строка автоматически конвертится в UTF-8

Что можно ещё попробовать ?