На основе моего собственного опыта с ним я не рекомендовал бы мерзавцу как введение в управление версиями. Я использовал его в течение нескольких месяцев теперь, и мое впечатление - то, что это очень мощно и - теперь, когда я частично получил голову вокруг этого - довольно интуитивный. Однако кривая обучения очень крута, даже при том, что я использовал управление версиями в течение многих лет. Это также страдает от того, чтобы быть слишком выразительным - это поддерживает много различных рабочих процессов и моделей разработки, но единственное руководство на "лучшем" способе использовать его несколько страниц глубиной в поиске Google, который также делает его коварным для вновь прибывшего для взятия.
Однако возможно, что запуск с пустого большого списка с мерзавцем мог бы на самом деле быть легче - мой опыт VCS - все с централизованным управлением версиями (CVS, SVN, По необходимости...) и часть моего (продолжающийся!) трудность с мерзавцем понимала последствия распределенной модели. Я действительно глядел кратко на другой DVCSes как Базар и Подвижный, и они, казалось, были несколько более благоприятными для новичка.
Так или иначе, как другие сказали, Подрывная деятельность является, вероятно, самым легким способом привыкнуть к мышлению управления версиями и получить практический опыт преимуществ VCS (откат, ответвления, совместная разработка, более легкий обзор кода, и т.д.).
, О, и не запускаются с CVS. Это все еще находится в практическом употреблении и имеет преимущества, но по моему скромному мнению это имеет слишком много исторических причуд и проблем реализации (неатомарные фиксации!), чтобы быть хорошим способом учиться.
Вы поместили PrivateKey
и соль
в неправильные позиции в вашем коде C #; согласно вашему коду Ruby, PrivateKey
должен быть секретным ключом HMAC.
Также имейте в виду, что вы включили новую строку в конец хэша, созданного вашей программой Ruby (согласно вашему образцу вывод, во всяком случае). Вы должны не включать новую строку, иначе хэши не будут совпадать.
Эта программа на C # исправляет первую проблему:
using System;
using System.Security.Cryptography;
using System.Text;
namespace Hasher
{
class Program
{
static void Main(string[] args)
{
const string PrivateKey = "whatever";
string date = "Sat, 14 Nov 2009 09:47:53 GMT";
string token = string.Format("-{0}-GET-/video.xml-", date);
byte[] salt_binary = SHA1.Create().ComputeHash(Encoding.ASCII.GetBytes(token));
string salt_hex = BitConverter.ToString(salt_binary).Replace("-", "").ToLower();
string salt = salt_hex.Substring(0, 20);
HMACSHA1 hmac_sha1 = new HMACSHA1(Encoding.ASCII.GetBytes(PrivateKey));
hmac_sha1.Initialize();
byte[] private_key_binary = Encoding.ASCII.GetBytes(salt);
byte[] passkey_binary = hmac_sha1.ComputeHash(private_key_binary, 0, private_key_binary.Length);
string passkey = Convert.ToBase64String(passkey_binary).Trim();
}
}
}
Я вижу 2 проблемы ,