views:

827

answers:

3

Hi,

Which cryptography algorithm is the most secure that ships with .net?

+4  A: 

As a direct answer: AES 256 Bit.

It's been beat on the most out of all the algorithms, and stands up well.

As a more involved answer: all the algorithms will work fine if you manage them well. Cyptography is more than the algorithm - it's about key storage, encryption mode, how you implement the call to the algorithm. It's akin to getting bullet proof walls on the outside of your house - but forgetting someone can fake your automatic garage door signal.

Tom Ritter
A: 

I'm somewhat partial to SHA-512. If 512 is a little excessive, the other members of the SHA-2 family might be helpful - SHA-256 and SHA-384 are both in the SHA-2 family. But AviewAnew's suggestion of AES 256 is good as well.

Thomas Owens
the msdn examples don't seem to be using a key to generate the hash?
Because you don't use a key to generate the hash. A SHA hash will always be the same for a given input.
Thomas Owens
Since the tag is encryption, I think we wanted an encryption algorithm, rather than a Hash function. ASDF - A Hash function is unkeyed. A MAC (sometimes called a keyed hash function) uses a key and has a different purpose from SHA or AES.
Tom Ritter
That could be. Based on the question, though, SHA does fit the bill as a cryptographic hash function.
Thomas Owens
+8  A: 

You cannot directly compare all types of cryptographic algorithms. That would be like comparing a sorting algorithm with a multiplication algorithm: they have different purposes. That being said, I would answer:

  • Symmetric cipher: AES-256
  • Asymmetric cipher: RSA with 4096 bit key (I believe that is the maximum in .NET) or ECDSA with 571 bit key (but that is only supported in .NET 3.5)
  • Hash: SHA-512
  • Message Authentication Code: HMAC with SHA-512

That being said, those are overkill for most applications, and you should do fine using AES-128, RSA with 2048 bit key, SHA-256 and HMAC with SHA-256.

Rasmus Faber
Rasmus, what would be ideal for a licence key?
My answer here: http://stackoverflow.com/questions/258994/net-cryptography-for-licence-keys#259458
Rasmus Faber