|
Аналог Chr() и Ord() из delphi в С#
|
|||
---|---|---|---|
#18+
Доброго времени суток, уважаемые коллеги. Переношу некоторый алгоритм шифрования строк из Delphi проекта, на С# .Net. Большое затруднение вызывает момент изменения символа. По сути мне нужно получить Код символа, прибавить или отнять от него какое-то число, затем результат обратно преобразовать к символу. В дельфи это выглядит так: Код: pascal 1. 2.
Вот что то такое написал я на C# после некоторых минут-часов чтения и подбора методов: Код: c# 1. 2. 3. 4. 5. 6.
Str - Это параметр передающийся в функцию. Точно так же как и StrValue в первом примере кода. В общем написанный мною код выдает что-то несуразное. Более того даже количество символов не соответствует исходному тексту. Ясное дело что я где-то накосячил. Где - не могу понять, так как первый раз столкнулся с C# лицом к лицу) Буду очень признателен за помощь начинающему )) Спасибо)) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2012, 20:49 |
|
Аналог Chr() и Ord() из delphi в С#
|
|||
---|---|---|---|
#18+
ixilimuse, Возможно Вам поможет string s = ""; char[] с = s.ToCharArray(); ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2012, 21:13 |
|
Аналог Chr() и Ord() из delphi в С#
|
|||
---|---|---|---|
#18+
ixilimuse, А в какой кодировке вам нужны коды символов? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2012, 22:05 |
|
Аналог Chr() и Ord() из delphi в С#
|
|||
---|---|---|---|
#18+
ixilimuse, Что делать, если код символа вылезет за диапазон? Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2012, 22:11 |
|
Аналог Chr() и Ord() из delphi в С#
|
|||
---|---|---|---|
#18+
в общем на скорую руку: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2012, 22:17 |
|
Аналог Chr() и Ord() из delphi в С#
|
|||
---|---|---|---|
#18+
Cat2, большое спасибо за идейку. Попробую в эту сторону поэкспериментировать. Да и более подробно по изучать эти типы в разрезе C#. Arm79, кодировка нужна Unicode. ммм, полагаю utf16 если быть более точным. По поводу диапазона. Механизм обкатывался какое-то время. В общем что бы выйти за диапазоны, смещение должно быть слишком большим (а оно таковым не является), либо символы должны быть рядом с пределом диапазона. Но в рамках реализуемой задачи такие ситуации не возникнут. Но замечание вполне справедливое - спасибо ) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2012, 22:21 |
|
Аналог Chr() и Ord() из delphi в С#
|
|||
---|---|---|---|
#18+
Arm79, огромное спасибо за пример. Конечно внушающая конструкция получается )) Зато есть повод поучить язык и сам .Net. Ещё раз спасибо за помощь ) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2012, 22:24 |
|
Аналог Chr() и Ord() из delphi в С#
|
|||
---|---|---|---|
#18+
ixilimuseкодировка нужна Unicode В юникоде не всегда одному символу соответствует один код. Есть всяческие модифицирующие символы и прочее. А зачем вообще что-то после преобразования делать текстом? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2012, 09:48 |
|
Аналог Chr() и Ord() из delphi в С#
|
|||
---|---|---|---|
#18+
Arm79, Вся задача состоит в том что у меня есть проект написанный на Delphi. Он считывает номер карты, затем берез из базы ссылку и кодовое слово. И формирует результирующую ссылку с параметром. И вот этот самый параметр должен шифроваться. Он шифруется. Изначально планировалось что дешифрующие функции я выгружу в DLL. Но что-то как-то не удалось программистам проекта на ASP.NET воспользоваться моей библиотекой. А параметр то ведь надо расшифровывать) Там по сути и несовместимость более чем уверен из-за разных типов строк происходит. Между моей библиотекой и проектом на ASP. Так как дело срочное, пробую всякие варианты и тот что будет самым быстрым тот временно и пустим в дело) И вот как вариант начал переводить дешифровку на C#. Кстати, модифицирующие символы.. Это конечно интересно. Надо будет посмотреть про них. Спасибо) Но вроде как на тестовых примерах таких ситуаций не возникало, по крайней мере при работе с delphi ) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2012, 11:04 |
|
Аналог Chr() и Ord() из delphi в С#
|
|||
---|---|---|---|
#18+
ixilimuseИзначально планировалось что дешифрующие функции я выгружу в DLL. Но что-то как-то не удалось программистам проекта на ASP.NET воспользоваться моей библиотекой. Вы точно для функций поставили стандартную декларацию о вызовах? Да и если обмен идет строками, то использовали PChar (PWChar) для этого? Ведь стандартные строки без ShareMem ранее не шли Кстати, я почему в примере выбрал 1251. У вас Chr(Ord( Значит используется не более 255 символов. В примере как раз таки и приводится все к типу byte. ixilimuseИ вот этот самый параметр должен шифроваться Шифрование вычитанием некоего числа из кода символа - это не шифрование, а недоразумение. Если стоит задача просто не заморачиваясь немного спрятать данные, преобразуйте строку в base64 Советую подумать над тем, чтобы полностью отказаться от Delphi при взамодействии с ASP.NET. Зачем мешанина из разных языков и платформ? Исходя из озвученной вами задачи (считать номер карты + получить и зашифровать параметр) работы там совсем немного ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2012, 13:22 |
|
Аналог Chr() и Ord() из delphi в С#
|
|||
---|---|---|---|
#18+
Arm79, Да тут не все так просто и в тоже время очень просто :) Кстати, ещё раз Вам огромное спасибо за идею, по поводу типов строк.. Да я использовал в объявлении stdcall. А вот тип данных использовал Юникодовские строки. И даже с Sharemem это не работает. Но вот с pchar & pwchar я ещё не пробовал билдить, а стоит =) Я понимаю что мое шифрование не идеально, но по сути для этой задачи этого хватает. Там тем более идет не просто смещение на фиксированное значение, а по определенному алгоритму размер смещения меняется для каждого символа. Плюс получившийся результат преобразуется в строку вида %123C%321F .. Тут конечно можно было бы сделать все по уму. Но увы мне эту задачу подсунули буквально за неделю до закрытия проекта. Причем я вообще наверное правильно сказать - подрядчик. Есть ВУЗ, куда внедряется проект. Есть компания которая внедряет проект, а я вообще случай оказался в этом замешан:) Просто нашли меня, и попросили что-нибудь придумать. Так как сроки горят, никто не берется.. Ну я и взялся, хотя даже пожалеть успел ввиду того что кучу нервов из-за срочности потратил =) И почему сейчас я не могу браться за перевод всего проекта на Net - нет времени. Да и не заплатит никто за это) По сути все что успел сделать за указанное время: поручить знакомому работу с железом. На базе его класса который работает с кардридером я написал софтинку которая читает карту. И в одном случае (если это терминал в корридоре) формируется ссылка и передается в барузер. А если это компьютер в библиотеки, происходит имитация действий пользователя. Открывается абоненмент читателя в программе Марк SQL. (Хотя при хорошем раскладе тут надо было связываться с разработчиками программы Марк. И они согласны реализовать поддержку устройства, проблема лишь в сроках) Все это реализовано на дельфи. Что бы переписать все это на C#, учитывая отсутствие опыта в этом языке - мне потребуется много времени) Задача интересная но в любом случае не успеваю ) Разве что для себя побалуюсь) И в общем-то местный (куда внедряется проект) программист сказал что ему будет достаточно библиотеки для того что бы он мог расшифровать параметр. Как мне сказали - я так и исполнил. Только вот о совместимости не подумал. Буду умнее в след. раз ) p.s. А сам проект - яркий пример того, как нельзя вести проекты )) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2012, 13:44 |
|
|
start [/forum/topic.php?fid=20&msg=38096991&tid=1405419]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
89ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
others: | 351ms |
total: | 528ms |
0 / 0 |