تجزئة FNV-1a
احصل على بصمة FNV-1a لأي نص، بدمج كل بايت قبل الضرب: تعطي foobar القيمة bf9cf968 على 32 بت، أو ست عشرة خانة ست عشرية على 64 بت، وهي علامة ثابتة لجداول التجزئة ومرشحات بلوم ومفاتيح التخزين المؤقت. مجاني في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
مثال محلول
- النص
- foobar
- البتات
- 32
- البتات
- 32
- التجزئة
- bf9cf968
- التجزئة (عدد صحيح)
- 3,214,735,720
- البايتات
- 6
FNV-1a هو الشكل البديل لتجزئة Fowler–Noll–Vo: ملخص غير تشفيري سريع يُبنى من أساس إزاحة ثابت وعدد أولي مختار بعناية وخطوة لكل بايت تجمع exclusive-or ثم الضرب، وهو شائع في جداول التجزئة ومرشحات Bloom وحقول البصمة المدمجة. يلجأ المطوّرون إلى FNV-1a عندما يحتاجون وسمًا مستقرًا من اثنين وثلاثين أو أربعة وستين بتًا أرخص من تجزئة تشفيرية وأكثر حساسية للترتيب من مجموع بسيط. تقبل أداة تجزئة FNV-1a هذه نصًا عاديًا، وتُسلسله بصيغة UTF-8، وتُرجع سلسلة ست عشرية بأحرف صغيرة—ثمانية أرقام لملف اثنين وثلاثين بتًا أو ستة عشر لملف أربعة وستين—إضافة إلى صيغة عدد صحيح، وطول بايتات UTF-8، والعرض المختار، وعلامة empty عندما يكون طول السلسلة المصدرية صفرًا.
معنى FNV-1a وكيف يختلف ملفا 32 و64 بت
تطوي تجزئات Fowler–Noll–Vo الرسالة إلى باقٍ بعرض ثابت بدءًا من أساس إزاحة موثّق، ولكل بايت إدخال تُطبّق أولًا exclusive-or للبايت في التجزئة الجارية ثم الضرب بعدد أولي مختار لذلك العرض. الشكل البديل FNV-1a يطبّق exclusive-or قبل الضرب؛ الشكل الأقدم FNV-1 يضرب أولًا. تنفّذ هذه القدرة FNV-1a فقط لأن هذا الترتيب هو ما تستشهد به معظم منظومات اللغات ودروس جداول التجزئة اليوم.
لاثنين وثلاثين بتًا الأساس هو صفر-س-ثمانية-واحد-واحد-ج-تسعة-د-ج-خمسة والعدد الأولي صفر-س-صفر-واحد-صفر-صفر-صفر-واحد-تسعة-ثلاثة، فتنتج سلسلة ست عشرية من ثمانية أرقام بأحرف صغيرة. لأربعة وستين بتًا الأساس صفر-س-ج-ب-ف-اثنان-تسعة-ج-ه-أربعة-ثمانية-أربعة-اثنان-اثنان-اثنان-ثلاثة-اثنان-خمسة والعدد الأولي صفر-س-واحد-صفر-صفر-صفر-صفر-صفر-صفر-صفر-واحد-ب-ثلاثة، فتنتج ستة عشر رقمًا ست عشريًا. يترك الإدخال الفارغ الباقي مساويًا لأساس الإزاحة نفسه، ويبلّغ هذا الطرف empty بقيمة true حتى يميّز العملاء الفراغ المتعمّد عن الحقل المفقود.
صُمم FNV-1a للتجزئة السريعة في الجداول ووسوم السلامة الخفيفة؛ وهو ليس تجزئة تشفيرية ولا يجوز استخدامه حيث تُطلب مقاومة متعمّدة للتصادم أو تخزين كلمات المرور أو مخططات التوقيع. إذا اختلفت أداة طرف ثالث على بايتات UTF-8 نفسها، فهي تستخدم غالبًا FNV-1 بدل FNV-1a أو عرضًا مختلفًا أو تجزّئ وحدات UTF-16 بدل بايتات UTF-8.
أين تفيد تجزئة FNV-1a
يلصق المطوّرون مفاتيح قصيرة ومقاطع إعداد ومعرّفات ذاكرة مؤقتة في حاسبة تجزئة FNV-1a عندما يحتاجون فهرس دلو مدمجًا من اثنين وثلاثين أو أربعة وستين بتًا يطابق بيئة تشغيل لغة أو ملاحظة بروتوكول قديمة. يعيد مهندسو الدعم حساب الملخصات من نص التذكرة للتأكد من أن تفريغًا ملصقًا لم يُقطع أو يُعاد ترميزه في الطريق. تستفيد مواقع المحتوى التي تتصدر لعبارة hash fnv1a من ودجت مجاني في المتصفح تطابق نتائجه مسار الأتمتة المدفوع مسبقًا بايتًا بايتًا.
تثبّت مهام التكامل المستمر متجه سلسلة معروفًا—مثلًا foobar إلى اثنين وثلاثين بتًا bf9cf968—وتجهيز إدخال فارغ حتى يفشل البناء فورًا عند أي تبديل عرضي بين FNV-1 وFNV-1a. تستخدم مختبرات التعليم الطرف نفسه لإظهار أن تغيير حرف واحد يقلب أرقامًا ست عشرية كثيرة، موضحة سلوك الانهيار دون إدخال آلات تشفيرية.
حالات الاستخدام
مفاتيح جداول التجزئة ووسوم الدلو
احسب FNV-1a لسلاسل قصيرة عندما تحتاج بصمة غير تشفيرية مستقرة من 32 أو 64 بت لدلاء الجدول أو مرشحات Bloom أو مفاتيح أجزاء الذاكرة المؤقتة.
عروض الصف والدعم
أظهر للطلاب والمشغّلين كيف يغيّر تعديل بضعة أحرف الست عشري FNV-1a دون تثبيت أدوات محلية أو مكتبات تشفير.
الأسئلة الشائعة
ما الفرق بين FNV-1a بـ 32 بت و64 بت؟
كلاهما يستخدم خطوة FNV-1a exclusive-or ثم الضرب على كل بايت UTF-8، لكن بأساسي إزاحة وأعداد أولية مختلفة. اثنان وثلاثون بتًا تعيد ثمانية أرقام ست عشرية؛ أربعة وستون تعيد ستة عشر. الافتراضي 32 عند حذف bits.
ماذا يحدث مع الإدخال الفارغ؟
النص الفارغ صالح. تضبط الاستجابة empty على true وhash على أساس الإزاحة للعرض المختار (811c9dc5 لـ 32 بت، cbf29ce484222325 لـ 64 بت) وbytes على 0.
هل FNV-1a تجزئة تشفيرية؟
لا. FNV-1a تجزئة غير تشفيرية سريعة للجداول والبصمات الخفيفة. لا تستخدمها لكلمات المرور أو التوقيعات أو سلامة مقاومة للتصادم ضد المهاجمين؛ استخدم ملخصات عائلة SHA في تلك الحالات.
لماذا تعطي أداة أخرى تجزئة FNV-1a مختلفة؟
مع النص نفسه تستخدم الأداة الأخرى في الغالب FNV-1 الذي يضرب قبل الدمج، أو عرضًا مختلفًا، أو وحدات UTF-16 بدل بايتات UTF-8. أما هذه الأداة فتحسب على بايتات UTF-8 بترتيب FNV-1a.
كيف تُحسب تجزئة FNV-1a؟
تبدأ من قيمة أساس ثابتة هي 0x811c9dc5 على 32 بت. ولكل بايت من النص يُدمج البايت أولًا في القيمة الجارية بعملية أو الحصرية، ثم تُضرب القيمة في العدد الأولي 0x01000193 وتُقتطع إلى 32 بت.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/enc/fnv1a \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"foobar"}'const res = await fetch("https://api.kit.forhosting.com/enc/fnv1a", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "foobar"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/fnv1a",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "foobar"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/fnv1a", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"foobar"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"foobar"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/fnv1a", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"text": "foobar"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.fnv1a",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
يشارك ودجت المتصفح المجاني وواجهة API المدفوعة مسبقًا وحدة حتمية واحدة، فلا تختلف عينات الواجبات وملاحظات البروتوكول وتجهيزات التكامل المستمر على الملخص. لا تدخل أي شبكة أو ملح عشوائي أو ساعة حائط في الحساب: كل مسار ناجح حساب خالص بالسعر الأساسي المنشور $0.002.
عقد الإدخال وحقول الاستجابة وسلوك الإدخال الفارغ
السلسلة الفارغة مسموحة عمدًا: الهوية الرياضية لـ FNV-1a على صفر بايت هي أساس الإزاحة، وتحتاج الأنابيب التي تبصم حقولًا اختيارية باقيًا مستقرًا بدل فشل صلب. عندما يكون طول المصدر صفرًا تضبط الاستجابة empty على true وhash على ست عشري الأساس للعرض المختار وbytes على صفر. لا يوجد مفتاح وضع لـ FNV-1 أو MD5 أو SHA أو CRC: إن احتجت تلك الملخصات فاستخدم قدرة مخصّصة حتى تطابق كل صفحة نية بحث واحدة وslug SEO واحد. أرسل جسم JSON بالحقل الإلزامي text مضبوطًا على السلسلة التي تريد تجزئتها. تُقبل الأسماء البديلة input وvalue وs وstring وcontent حتى تبقى النماذج القديمة والعملاء المختصرون مربوطين. يختار bits الاختياري العرض: اثنان وثلاثون (الافتراضي) أو أربعة وستون؛ تُقبل الأسماء البديلة width وbit_width، وتعمل الأشكال الرقمية والنصية. تُحوَّل الأعداد المنتهية والأعداد الصحيحة الكبيرة إلى سلسلة قبل التجزئة؛ وتثير الكائنات والمصفوفات والقيم المنطقية وnull وInfinity وNaN خطأ invalid_input دون فوترة. للإدخال غير الفارغ empty تكون false وbytes تساوي طول UTF-8 وhash هو ملخص ست عشري بأحرف صغيرة بلا بادئة صفر-س، وhash_int يحمل القيمة نفسها كعدد صحيح بلا إشارة لاثنين وثلاثين بتًا أو كسلسلة عشرية لأربعة وستين بتًا حتى يبقى المدى الكامل بلا إشارة دقيقًا في JSON. algorithm دائمًا التسمية FNV-1a؛ وoffset_basis وprime يعيدان سلاسل المعاملات للعرض المختار حتى تقتبس أمثلة OpenAPI وردود الدعم الملف بلا غموض.
أين تُثبت واجهة API لتجزئة FNV-1a جدواها
ولأن التنفيذ parse خالص من المستوى A، تكلف كل مكالمة ناجحة السعر الأساسي المنشور $0.002 بلا رموز نموذج ولا شبكة صادرة؛ والتحقق الفاشل لا يستهلك الرصيد. أبقِ الحمولات تحت سقف الأحرف الموثّق، وعامل حقل الست عشري هدف اللصق القانوني، لتحصل على قيم FNV-1a قابلة لإعادة الإنتاج للتوثيق وSDK والعاملين على الحافة وعروض الصف دون إقامة خدمة تجزئة منفصلة.
حالات التكامل
متجهات golden للتكامل المستمر وتجهيزات الإدخال الفارغ
ثبّت foobar → bf9cf968 (32 بت) والفارغ → أساس الإزاحة حتى يلتقط التكامل المستمر فورًا خلط FNV-1 وFNV-1a أو انحراف ترميز UTF-8.
أسئلة تقنية
كيف أحسب تجزئة FNV-1a للنص؟
أرسل JSON مع text مساويًا لسلسلتك وbits اختياري 32 أو 64 (الافتراضي 32). يعيد الحقل hash ست عشريًا صغيرًا لملخص FNV-1a على بايتات UTF-8؛ وhash_int هو القيمة نفسها كعدد بلا إشارة (رقم لـ 32 بت، سلسلة عشرية لـ 64 بت).
كم تكلفة حاسبة تجزئة FNV-1a؟
أداة المتصفح مجانية. تستخدم طلبات API رصيد KIT المدفوع مسبقًا بسعر $0.002 لكل استدعاء ناجح؛ والإدخال غير الصالح لا يُفوتر.