سؤال

أقوم بتطوير تطبيق، يستخدم بعض خدمات الراحة على الويب. تقول الوثائق الفنية أنه يجب علي اجتياز شعلة SHA256 من بعض السلسلة في الطلب.

في طلب مثال (في الوثائق) سلسلة:

HN-RW2ZHYWLLUYKLL5ZO_7LWJVKRBSHZPB5CD1Expres = 1893013926label [0] = أي / somestatisticsistics = 1D، 2D، 7D، 28D، 30D، 31D، Lifetimestatus = upl، livetitle = a

بعد التنفيذ:

digest = Digest::SHA256.digest(string_to_sign)
signature = Base64::encode64(digest).chomp.gsub(/=+$/, '')

النتائج في التجزئة:

yryun2zo + vvxisnp / vkqm5cl6dpzoin7mnes0izj06u

هذا المثال في روبي، حيث أن الوثائق لها مطورو روبي.

أقوم بتطوير طلبي في C # وفي نفس السلسلة تماما، عندما أقوم بتنفيذ:

byte[] rawHash = sha256.ComputeHash(rawRequest, 0, rawRequest.Length);
string friendlyHash = Convert.ToBase64String(rawHash);

وإزالة علامات "=" زائدة، أحصل على:

vw8pl / kxnjcebyhtfnimikxzdiunysff2ujsow8hyiw.

وبالتالي، فشل التطبيق في التنفيذ الناتج عن خطأ في عدم تطابق التوقيع.

لقد حاولت تغيير الترميز أثناء تحويل السلسلة إلى صفيف بايت سبق التجزئة ولم يتم تغيير أي شيء.

أيه أفكار؟

هل كانت مفيدة؟

المحلول

بناء على الوثيقة هنا, ، أنت في عداد المفقودين - (أي اندفاعة) في سلسلة الخاص بك. يبدو أن Acrobat يزيلها بشكل مفيد في نسخ معجون من المستند ...

إليك بعض التعليمات البرمجية التي قمت بتنظيمها معا والتي تحصل على نفس القيمة مثل المثال (حسنا، إذا قمت بتشطيب النهائي =)

    string s = "hn-Rw2ZH-YwllUYkklL5Zo_7lWJVkrbShZPb5CD1expires=1893013926label[0]=any/somestatistics=1d,2d,7d,28d,30d,31d,lifetimestatus=upl,livetitle=a";

    SHA256Managed sh = new SHA256Managed();
    byte[] request = System.Text.UTF8Encoding.UTF8.GetBytes(s);
    sh.Initialize();
    byte[] b4bbuff = sh.ComputeHash(request, 0, request.Length);

    string b64 = Convert.ToBase64String(b4bbuff);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top