Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Scrypto
66 / 67 / 26
Регистрация: 08.02.2013
Сообщений: 383
#1

Перевести функцию из C# в PHP (Буквально 5 строк)

27.05.2018, 19:48. Просмотров 747. Ответов 8
Метки нет (Все метки)

C#
1
2
3
4
5
6
7
8
9
  static string sha1(string input)
        {
            byte[] hash;
            using (var sha1 = new System.Security.Cryptography.SHA1CryptoServiceProvider())
                hash = sha1.ComputeHash(Encoding.Unicode.GetBytes(input));
            var sb = new StringBuilder();
            foreach (byte b in hash) sb.AppendFormat("{0:x2}", b);
            return sb.ToString();
        }
Если просто делать sha1 в php и этой функции в C# Результат отличается

Добавлено через 18 минут
Судя по всему проблема в кодировке
C# = unicode
PHP = ASCII

Каким образом, можно пхп заставить сменить кодировку?

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2018, 19:48
Ответы с готовыми решениями:

Перевести функцию в код PHP
Нужно вычислить функцию в языке PHP. X вводится в самом коде ...

Вызывать PHP функцию из другого php файла
Я новичок в PHP, но достаточно знаком с другими языками программирования,...

Перевести небольшую функцию с C на PHP
Всем привет! Помогите, пожалуйста. В C не разбираюсь, но надо реализовать...

Перевести пару строк с PHP на ASP
Кто может перевести этот кусок текста с php на asp? Я с ASP никогда не работал....

Запишите функцию PHP вычисляющую количество строк, возвращаемых запросом на вставку записей
Запишите функцию PHP вычисляющую количество строк, возвращаемых запросом на...

8
wmysterio
143 / 143 / 71
Регистрация: 24.12.2014
Сообщений: 415
Завершенные тесты: 8
27.05.2018, 20:15 #2
Цитата Сообщение от Scrypto Посмотреть сообщение
C# = unicode
Можете utf-8 использовать
Цитата Сообщение от Scrypto Посмотреть сообщение
PHP = ASCII
В PHP тоже.
Цитата Сообщение от Scrypto Посмотреть сообщение
Результат отличается
Формат кривой. Вообще парсить в шарпе массив байт в хекс-строку это то ещё мракобесие та ещё задачка, но раз надо, то когда-то помогла эта функция:
C#
1
2
3
public static string ByteArrayToString( byte[] ba ) {
    return BitConverter.ToString( ba ).Replace( "-", "" );
}
1
koders
107 / 70 / 27
Регистрация: 15.07.2016
Сообщений: 232
27.05.2018, 20:16 #3
Цитата Сообщение от Scrypto Посмотреть сообщение
Каким образом, можно пхп заставить сменить кодировку?
Передать строку в нужной кодировке. SHA1 работает с байтами, а не с символами, если передать параметр в UTF-8, получится то, что должно быть.
1
Scrypto
66 / 67 / 26
Регистрация: 08.02.2013
Сообщений: 383
27.05.2018, 20:25  [ТС] #4
Ребят, спасибо.
wmysterio,koders, менять что-то в C#, мне имеет мало смысла, так как программами пользуются сотни людей, и у каждого может быть несколько копий, и выдавать новые учётные данные, из-за смены кодировки, я просто устану, да и народу это еще та проблема, переактивировать каждую программу, в связи с этим собственно вижу один выход, в php сменить кодировку строки перед отправкой в Sha1, собственно вопрос, каким образом это можно осуществить?
0
wmysterio
143 / 143 / 71
Регистрация: 24.12.2014
Сообщений: 415
Завершенные тесты: 8
27.05.2018, 20:31 #5
Цитата Сообщение от Scrypto Посмотреть сообщение
переактивировать каждую программу
Это и не нужно. В шапре есть возможность конвертации из одной кодировки в другую. Также есть возможность получить текущую кодировку. Из этого можно что-то придумать, чтобы в PHP приходили данные с нужной кодировкой, так как узнать кодировку строки уже в PHP не всегда получится ( кажется такие способы есть, но у меня ни один не сработал адекватно ).
0
Scrypto
66 / 67 / 26
Регистрация: 08.02.2013
Сообщений: 383
27.05.2018, 20:38  [ТС] #6
wmysterio, я написал вот так, этот код не для пользователей, а для меня лично, чтобы я мог выдавать активацию с любого устройства.
Но, даже с таким преобразованием iconv выдаёт ответ, не совпадающий с активатором написанным на C#
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<form action="generator.php" method="post">
    <p>Код: <input type="text" name="code" /></p>
    <p><input type="submit" /></p>
</form>
 
<?php
if(isset($_POST['code'] )){
    $code = iconv("ASCII","UNICODE",$_POST['code']);
}
else
    $code = "";
$saltAvito = iconv("ASCII","UNICODE",'antivzlomAvito');
$saltYoula = iconv("ASCII","UNICODE",'antivzlomyoula');
$saltDrom = iconv("ASCII","UNICODE",'antivzlomDrom');
$saltMyWork = iconv("ASCII","UNICODE",'antivzlom');
 
echo "Avito: ".sha1(sha1(md5($code).$saltAvito));?><br>
<?php
echo "Youla: ".sha1(sha1(md5($code).$saltYoula));?><br>
<?php
echo "Drom: ".sha1(sha1(md5($code).$saltDrom));?><br>
<?php
echo "MyWork: ".sha1(sha1(md5($code).$saltMyWork));?><br>
0
Emilien
501 / 405 / 238
Регистрация: 07.11.2015
Сообщений: 654
27.05.2018, 21:12 #7
Лучший ответ Сообщение было отмечено Scrypto как решение

Решение

В C# Encoding.Unicode. это UTF-16 little-endian.
PHP
1
2
3
4
5
$input = "Привет";
 
$input = iconv('UTF-8', 'UTF-16LE', $input);
 
echo sha1($input);
PHP http://rextester.com/XLOW35877
C# http://rextester.com/QSZC2316

Результат совпадает ad5ef6afd4bade078f3e19fae5e45a43635a18cb
1
Scrypto
66 / 67 / 26
Регистрация: 08.02.2013
Сообщений: 383
27.05.2018, 21:59  [ТС] #8
Emilien,
PHP
1
sha1(sha1(md5($code).$saltAvito))
У меня идёт несколько преобразований, это получается мне на каждом нужно iconv применить, так как если сделать, просто к переменной, то результат не тот, что нужен

Добавлено через 19 минут
Получилось сделать так
PHP
1
2
<?php
echo "Avito: ".sha1(iconv('UTF-8', 'UTF-16LE',sha1(iconv('UTF-8', 'UTF-16LE', md5($code).$saltAvito))));?><br>
Так как md5 у меня в шарпе в utf-8, то на нем преобразование не нужно )
Всем спасибо
0
Jewbacabra
27.05.2018, 22:05     Перевести функцию из C# в PHP (Буквально 5 строк)
  #9

Не по теме:

Цитата Сообщение от Scrypto Посмотреть сообщение
sha1(sha1(md5
А почему только 3 раза хешируется, а не 30?

0
27.05.2018, 22:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2018, 22:05
Привет! Вот еще темы с ответами:

Как перевести функцию, записанную в строке в нормальную функцию
Помогите плиз... Как из функции f(x,y) типа строка, взятой из TextBox,...

Как отправить переменные не просто в файл php, а в его php-функцию
Доброго времени суток. Подскажите: можно ли и как передать переменные с...

Вытащить переменную из цикла PHP в функцию JS, и через AJAX обратно в PHP
Здравствуйте! Моя задача сделать форму обратной связи, но не самую простую....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru