> > I noted in my email of 14 August that I had a file with a bacula md5 > that I was not able to match using the (Linux, Debian stable) md5 cli > utility. > > I would be grateful to learn if anyone has replicated the method of > calculating an md5 hash using python. If so I'd be grateful to know how > it is done. >
>From memory, the MD5 is 'correct', but the base64 translation is a bit funny. Here's a C# version I wrote quite a while back, if it's any help. It's the baculaBase64 routine that's probably the most useful: public static string toBase64(UInt64 val) { int digits = 0; UInt64 tmp = val; do { tmp >>= 6; digits++; } while (tmp != 0); string s = ""; tmp = val; do { s = base64lookup[tmp & 0x3F] + s; tmp >>= 6; } while (tmp != 0); return s; } public static string toBase64(Int64 val) { int digits = 0; Int64 tmp = val; do { tmp >>= 6; digits++; } while (tmp != 0); string s = ""; tmp = val; do { s = base64lookup[tmp & 0x3F] + s; tmp >>= 6; } while (tmp != 0); return s; } public static string toBase64(byte[] bytes) { return baculaBase64(bytes); } private static char[] base64lookup = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/' }; public static string baculaBase64(byte[] bytes) { UInt32 bits; int count; string result = ""; for (count = 1; count < bytes.Length; count++) { if ((bytes[count] & 0x80) == 0x80) { switch (count % 3) { case 1: bytes[count - 1] |= 0x03; break; case 2: bytes[count - 1] |= 0x0F; break; } } } count = 0; while (count < bytes.Length) { int endflag = 0; bits = bytes[count++]; if (count < bytes.Length) { bits = (bits << 8) | bytes[count++]; } else { bits <<= 8; endflag++; } if (count < bytes.Length) { bits = (bits << 8) | bytes[count++]; } else { bits <<= 8; endflag++; } for (int bytelet = 3; bytelet >= 0; bytelet--) { uint val = (bits >> (bytelet * 6)) & 0x3F; if (val != 0 || bytelet >= endflag) { if (endflag == 2 && bytelet == 2) val >>= 4; result += base64lookup[val]; } } } return result; } public static string properBase64(byte[] bytes) { UInt32 bits; int count; string result = ""; count = 0; while (count < bytes.Length) { int endflag = 0; bits = bytes[count++]; if (count < bytes.Length) bits = (bits << 8) | bytes[count++]; else { bits <<= 8; endflag++; } if (count < bytes.Length) bits = (bits << 8) | bytes[count++]; else { bits <<= 8; endflag++; } for (int bytelet = 3; bytelet >= 0; bytelet--) { uint val = (bits >> (bytelet * 6)) & 0x3F; if (val == 0 && bytelet < endflag) result += "="; else result += base64lookup[val]; } } return result; } James ------------------------------------------------------------------------------ Start uncovering the many advantages of virtual appliances and start using them to simplify application deployment and accelerate your shift to cloud computing http://p.sf.net/sfu/novell-sfdev2dev _______________________________________________ Bacula-users mailing list Bacula-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bacula-users