Подскажите как будет выглядеть этот алгоритм на c#, что то я не могу с ним разобраться.
Ответьте пожалуйста для чего нужно convertToHex в версии на Java?
using System;
using System.Text;
using System.Security.Cryptography;
using System.Collections.Generic;
// Create an MD5 sum string of this string
private static string GetMD5Sum(string str)
{
// step 1, calculate MD5 hash from input
MD5 md5 = System.Security.Cryptography.MD5.Create();
byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(str);
byte[] hash = md5.ComputeHash(inputBytes);
// step 2, convert byte array to hex string
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hash.Length; i++)
sb.Append(hash[i].ToString("X2"));
return sb.ToString();
}
private static string buildUrlParamsWithSignature(SortedDictionary<string, string> parms, string password)
{
string url = "";
foreach (KeyValuePair<string, string> kvp in parms)
{
string val = System.Uri.EscapeDataString(kvp.Value);
url += kvp.Key + "=" + val + "&";
}
string sign = GetMD5Sum(url + "&password=" + Uri.EscapeDataString(password));
url += "signature=" + sign.ToLower();
return url;
}
# -*- coding: utf-8 -*-
import urllib, hashlib
from copy import copy
def sign_request(params, username, password):
"""
params may be either a dict or a list of (key, value) tuples
Returns urlencoded signed string for send as GET or POST data
"""
if isinstance(params,dict):
p1 = params.items()
else:
p1 = copy(params)
p1.append( ('username', username))
p1.sort(key= lambda x: x[0])
url = urllib.urlencode(p1)
# Примечание: случай, когда пароль содержит пробел, не проверялся
url1 = "%s&&password=%s" % (url, urllib.quote_plus(password))
dig = hashlib.md5(url1).hexdigest()
return "%s&signature=%s" % (url, dig)
{username='logn', password='mypassword',action='send'}
action=send&password=mypassword&username=login&
$res .= ($res == '' ? '' : '&') . $value;
строка "Тестовый" => "%D0%A2%D0%B5%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B9"
"english123456" => "english123456"
action=send&password=mypassword&username=login&&password=mypassword
action=send&message=%D0%A2%D0%B5%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B9&number=791701234567&senderid=tasktest&username=DEMOLOGIN&
99b38a7d2b5c9497222ebb0f5bf0e48c
http://api.comtube.ru/scripts/api/sms.php?action=send&message=%D0%A2%D0%B5%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B9&number=79871234567&senderid=tasktest&username=DEMOLOGIN&signature=99b38a7d2b5c9497222ebb0f5bf0e48c
donexpress_premium писал(а):Подводя итог можно сделать вывод: разрабочики сильно торопились/поленились/не придали значения, а когда увидели (увидят после поста ) то - поздно - поезд ушел: тысячи клиентов формируют подписи по корявым строкам.
Надеюсь пост поможет вам сохранить свое время.
public String urlencode(String src){
String[] p = System.Web.HttpUtility.UrlEncode(src).Split('%');
String res = p[0];
for (int x = 1; x < p.Length - 1; x++)
{
res += "%" + p[x].Substring(0, 2).ToUpper() + (p[x].Length > 2 ? p[x].Substring(2) : "");
}
return res;
}
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24