Skip to main content

.Net 2.0: Hash with Salt using SecureString

Cryptography Simplified in Microsoft .NET
Security Guidelines: .NET Framework 2.0

Ideally, we would return a SecureString here and make the consuming developer work with that but for our example...

public string HashInput(string input, int saltLength)
{
byte[] ssBytes;

// create salt
byte[] bytSalt = new byte[saltLength];
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetBytes(bytSalt);

// create secure string for concatinating input and salt
using (SecureString ss = new SecureString())
{
// append original string
foreach (char c in input.ToCharArray())
{
ss.AppendChar(c);
}

// append salt
foreach (byte b in bytSalt)
{
ss.AppendChar(Convert.ToChar(b));
}

// prevent SecureString manipulation
ss.MakeReadOnly();

// instantiate hash provider
SHA512Managed sha = new SHA512Managed();

// pointer to hold unmanaged reference to SecureString instance
IntPtr bstr = IntPtr.Zero;

try
{
// marshall SecureString into byte array
ssBytes = new byte[ss.Length * 2];
Marshal.Copy((bstr = Marshal.SecureStringToBSTR(ss)),
ssBytes, 0, ssBytes.Length);
}
finally
{
// Make sure that the clear text data is zeroed out
Marshal.ZeroFreeBSTR(bstr);
}

// hash byte array
byte[] hashed = sha.ComputeHash(ssBytes);

// clear the provider memory
sha.Clear();

return Convert.ToBase64String(hashed);
}
}

Comments

Popular posts from this blog

Rollback a Ooops in TFS with TFPT Rollback

Rhut roe, Raggie. You just checked in a merge operation affecting 100's of files in TFS against the wrong branch. Ooops. Well, you can simply roll it back, right? Select the folder in Source Control Explorer and...hey, where's the Rollback? Rollback isn't supported in TFS natively. However, it is supported within the Power Tools leveraging the command-line TFPT.exe utility. It's fairly straightforward to revert back to a previous version--with one caveot. First, download and install the Team Foundation Power Tools 2008 on your workstation. Before proceeding, let's create a workspace dedicated to the rollback. To "true up" the workspace, the rollback operation will peform a Get Latest for every file in your current workspace. This can consume hours (and many GB) with a broad workspace mapping. To work around this, I create a temporary workspace targeted at just the area of source I need to roll back. So let's drill down on our scenario... I'm worki...

Switching the Parents to Ubuntu...?

I spent a half hour or so recently on the phone walking my Mom through a technical issue. Tentatively, I diagnosed her issue as a hard drive failure. She brought it over on her last visit and sure enough, the Dell XPS 450 from circa 1999 sounds like a bad coin-operated laundry at full capacity. I was aghast to discover she's running Windows 98. Ugh. Also, her recovery disk is just that--for recovery. I don't believe I'll be able to re-install Win98 on a new hard drive. That, coupled with the end of Microsoft (and Dell) support for Win98, got me thinking about Linux. (and she's not intense about her computing needs...and she doesn't want to spend much money...) I've been reading good things about switching one's parents to Ubuntu. Any thoughts out there?

VSTS Tester Demo Follow-ups

Last week, I delivered a VSTS 2008 Tester Edition demo to a prospective client. Following up on a few questions to which I didn’t know the answer: Q. Can I use Subversion with TFS? A. I get this question all the time from developers. It’s a perfectly valid question. The answer is no…but yes…sort of. The version control repository (and all data) must remain SQL Server. Yes, it’s proprietary. Further, if you plan to use TFS in your software development environment, but choose not to leverage it for version control, it severely limits the usefulness of the information elicited from TFS (because you’re not feeding in the crucial VC data). If you’re not leveraging VC in TFS, you’re probably not leveraging Team Build either. That said, while a fully-integrated TFS for ALM and SCM is the ideal, there’s a compelling argument to leverage TFS as a repository for requirements, scenarios, test cases, functional and load testing as well as defect tracking. TFS is an excellent repository to s...