פונקציית גיבוב לאימות יחודיות של נתונים
-
אני צריך לבדוק על מערכים גדולים יחסית של נתונים (יכול להגיע לכמה מאות תווים) שלא עובר סטרינג יותר מפעם אחת,
כתבתי פונקציה לגיבוב (גוגל סקריפט), והיה נראה שזה עובד טוב, עד ששמתי לב בבדיקות שכששלחתי כמה מילים בנות 3 אותיות (בעברית) האש היה אותו הדבר... מה לא תקין אצלי?
כרגע זה עובד טוב על הסטרינגים הארוכים, אבל תמיד יכול להיות משהו קצר יותר/2 משפטים ששונים באות או שניים...
הפונקציות שכתבתי
function generateHash(text) { let rawHash = Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, text); let hexHash = rawHash.map(function (byte) { return ('0' + (byte & 0xFF).toString(16)).slice(-2); }).join(''); return hexHash; } function generateHashMD5(text) { let rawHash = Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, text); Logger.log(rawHash) let hexHash = rawHash.map(function (byte) { return ('0' + (byte & 0xFF).toString(16)).slice(-2); }).join(''); return hexHash; }
ניסיתי לקחת מכאן https://stackoverflow.com/questions/7994410/hash-of-a-cell-text-in-google-spreadsheet מה שנראה אותו רעיון כמו הפונקציות הקודמות, אבל טיפה שונה, ועדיין אותו הדבר.
function GetSHA1(input) { var rawHash = Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_1, input); var txtHash = ''; for (j = 0; j <rawHash.length; j++) { var hashVal = rawHash[j]; if (hashVal < 0) hashVal += 256; if (hashVal.toString(16).length == 1) txtHash += "0"; txtHash += hashVal.toString(16); } return txtHash; }
-
זה כנראה בגלל העברית, תווים שונים בעברית כנראה נחשבים אותו תו.
תנסה את זהfunction generateHash(text) { let rawHash = Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, text, Utilities.Charset.UTF_8); return Utilities.base64EncodeWebSafe(rawHash); }
עדיף MD5 כי הוא זול יותר לחישוב משמעותית, ואין לו חיסרון בתחומים שלא נוגעים לאבטחה.