Posts Tagged csharp
How to calculate password hash in C# for Jira users?
Posted by suddenelfilio in .net, Visual Studio .Net on 01/09/2010
While I’m working on migrating our current issue tracking system to the new Jira instance I needed to manually create new users in Jira’s database. The users are stored in the userbase table, but when you take a look you’ll see that the password is not stored instead there is a column called “PASSWORD_HASH” which contains the password in a hashed form. Since Jira uses the OSUser package from OpenSymphony you can go and look in the code.
The code that Jira uses to create the password hash is the following in Java:
private String createHash(String original) {
byte[] digested = PasswordDigester.digest(original.getBytes());
byte[] encoded = Base64.encode(digested);
return new String(encoded);
}
Now here you a digest being generated from the original value. Well this is a SHA-1/512 hash which is then converted to a Base64 representation and that’s all!
Okay here is how you can do this in C#:
using System;
using System.Text;
using System.Security.Cryptography;
public sealed class JiraPasswordHasher
{
public static string createHash(string original)
{
SHA512 shaM = new SHA512Managed();
var result = shaM.ComputeHash(System.Text.Encoding.ASCII.GetBytes(original));
return Convert.ToBase64String(result);
}
}
Have fun!
PART 2: How to get the mime type of a file using the name of a file in C#
Posted by suddenelfilio in Visual Studio .Net on 31/08/2010
Following up on a comment that was posted in my previous post I updated my library to first look in a hard coded list of extensions to see if I can find a corresponding mime type. I must admit that I got a bit inspired by the article Getting MIME types from extension by Pieter Joost van de Sande. I did however updated it to be more .net 4.0 by using the new Lazy<> which lets you do lazy loading. I also replaced the HashTable by a SortedDictionary<string,string>
So the code I used to look up the mime type has changed to this:
string fileExtension = System.IO.Path.GetExtension(fileName).ToLower();
var valueInTable = MimeTypeTable.MimeTypes.Value[fileExtension];
if (valueInTable != null)
return valueInTable as string;
Microsoft.Win32.RegistryKey rk = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(fileExtension);
if (rk != null && rk.GetValue("Content Type") != null)
return rk.GetValue("Content Type").ToString();
return null;
As you can see I now do a lookup in the MimeTypeTable and if I have no result only then I’ll go into the registry to try having better luck there. Here is the implementation of the MimeTypeTable class (beware it’s quite long) also the download of the new library is at the end of this post:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Suddenelfilio.ExtensionMethods.IO
{
internal sealed class MimeTypeTable
{
internal static Lazy<SortedDictionary<string, string>> MimeTypes
{
get
{
return new Lazy<SortedDictionary<string,string>>(() => LoadTable(), true);
}
}
private static SortedDictionary<string, string> LoadTable()
{
SortedDictionary<string, string> types = new SortedDictionary<string, string>(StringComparer.InvariantCultureIgnoreCase);
types.Add(".3dm", "x-world/x-3dmf");
types.Add(".3dmf", "x-world/x-3dmf");
types.Add(".aab", "application/x-authorware-bin");
types.Add(".aam", "application/x-authorware-map");
types.Add(".aas", "application/x-authorware-seg");
types.Add(".abc", "text/vnd.abc");
types.Add(".acgi", "text/html");
types.Add(".afl", "video/animaflex");
types.Add(".ai", "application/postscript");
types.Add(".aif", "audio/aiff");
types.Add(".aifc", "audio/aiff");
types.Add(".aiff", "audio/aiff");
types.Add(".aim", "application/x-aim");
types.Add(".aip", "text/x-audiosoft-intra");
types.Add(".ani", "application/x-navi-animation");
types.Add(".aos", "application/x-nokia-9000-communicator-add-on-software");
types.Add(".aps", "application/mime");
types.Add(".art", "image/x-jg");
types.Add(".asf", "video/x-ms-asf");
types.Add(".asm", "text/x-asm");
types.Add(".asp", "text/asp");
types.Add(".asx", "application/x-mplayer2");
types.Add(".au", "audio/x-au");
types.Add(".avi", "video/avi");
types.Add(".avs", "video/avs-video");
types.Add(".bcpio", "application/x-bcpio");
types.Add(".bm", "image/bmp");
types.Add(".bmp", "image/bmp");
types.Add(".boo", "application/book");
types.Add(".book", "application/book");
types.Add(".boz", "application/x-bzip2");
types.Add(".bsh", "application/x-bsh");
types.Add(".bz", "application/x-bzip");
types.Add(".bz2", "application/x-bzip2");
types.Add(".c", "text/plain");
types.Add(".c++", "text/plain");
types.Add(".cat", "application/vnd.ms-pki.seccat");
types.Add(".cc", "text/plain");
types.Add(".ccad", "application/clariscad");
types.Add(".cco", "application/x-cocoa");
types.Add(".cdf", "application/cdf");
types.Add(".cer", "application/pkix-cert");
types.Add(".cha", "application/x-chat");
types.Add(".chat", "application/x-chat");
types.Add(".class", "application/java");
types.Add(".conf", "text/plain");
types.Add(".cpio", "application/x-cpio");
types.Add(".cpp", "text/plain");
types.Add(".cpt", "application/x-cpt");
types.Add(".crl", "application/pkix-crl");
types.Add(".crt", "application/pkix-cert");
types.Add(".csh", "application/x-csh");
types.Add(".css", "text/css");
types.Add(".cxx", "text/plain");
types.Add(".dcr", "application/x-director");
types.Add(".deepv", "application/x-deepv");
types.Add(".def", "text/plain");
types.Add(".der", "application/x-x509-ca-cert");
types.Add(".dif", "video/x-dv");
types.Add(".dir", "application/x-director");
types.Add(".dl", "video/dl");
types.Add(".doc", "application/msword");
types.Add(".dot", "application/msword");
types.Add(".dp", "application/commonground");
types.Add(".drw", "application/drafting");
types.Add(".dv", "video/x-dv");
types.Add(".dvi", "application/x-dvi");
types.Add(".dwf", "drawing/x-dwf (old)");
types.Add(".dwg", "application/acad");
types.Add(".dxf", "application/dxf");
types.Add(".dxr", "application/x-director");
types.Add(".el", "text/x-script.elisp");
types.Add(".elc", "application/x-elc");
types.Add(".eps", "application/postscript");
types.Add(".es", "application/x-esrehber");
types.Add(".etx", "text/x-setext");
types.Add(".evy", "application/envoy");
types.Add(".f", "text/plain");
types.Add(".f77", "text/plain");
types.Add(".f90", "text/plain");
types.Add(".fdf", "application/vnd.fdf");
types.Add(".fif", "image/fif");
types.Add(".fli", "video/fli");
types.Add(".flo", "image/florian");
types.Add(".flx", "text/vnd.fmi.flexstor");
types.Add(".fmf", "video/x-atomic3d-feature");
types.Add(".for", "text/plain");
types.Add(".fpx", "image/vnd.fpx");
types.Add(".frl", "application/freeloader");
types.Add(".funk", "audio/make");
types.Add(".g", "text/plain");
types.Add(".g3", "image/g3fax");
types.Add(".gif", "image/gif");
types.Add(".gl", "video/gl");
types.Add(".gsd", "audio/x-gsm");
types.Add(".gsm", "audio/x-gsm");
types.Add(".gsp", "application/x-gsp");
types.Add(".gss", "application/x-gss");
types.Add(".gtar", "application/x-gtar");
types.Add(".gz", "application/x-gzip");
types.Add(".gzip", "application/x-gzip");
types.Add(".h", "text/plain");
types.Add(".hdf", "application/x-hdf");
types.Add(".help", "application/x-helpfile");
types.Add(".hgl", "application/vnd.hp-HPGL");
types.Add(".hh", "text/plain");
types.Add(".hlb", "text/x-script");
types.Add(".hlp", "application/x-helpfile");
types.Add(".hpg", "application/vnd.hp-HPGL");
types.Add(".hpgl", "application/vnd.hp-HPGL");
types.Add(".hqx", "application/binhex");
types.Add(".hta", "application/hta");
types.Add(".htc", "text/x-component");
types.Add(".htm", "text/html");
types.Add(".html", "text/html");
types.Add(".htmls", "text/html");
types.Add(".htt", "text/webviewhtml");
types.Add(".htx", "text/html");
types.Add(".ice", "x-conference/x-cooltalk");
types.Add(".ico", "image/x-icon");
types.Add(".idc", "text/plain");
types.Add(".ief", "image/ief");
types.Add(".iefs", "image/ief");
types.Add(".iges", "application/iges");
types.Add(".igs", "application/iges");
types.Add(".ima", "application/x-ima");
types.Add(".imap", "application/x-httpd-imap");
types.Add(".inf", "application/inf");
types.Add(".ins", "application/x-internett-signup");
types.Add(".ip", "application/x-ip2");
types.Add(".isu", "video/x-isvideo");
types.Add(".it", "audio/it");
types.Add(".iv", "application/x-inventor");
types.Add(".ivr", "i-world/i-vrml");
types.Add(".ivy", "application/x-livescreen");
types.Add(".jam", "audio/x-jam");
types.Add(".jav", "text/plain");
types.Add(".java", "text/plain");
types.Add(".jcm", "application/x-java-commerce");
types.Add(".jfif", "image/jpeg");
types.Add(".jfif-tbnl", "image/jpeg");
types.Add(".jpe", "image/jpeg");
types.Add(".jpeg", "image/jpeg");
types.Add(".jpg", "image/jpeg");
types.Add(".jps", "image/x-jps");
types.Add(".js", "application/x-javascript");
types.Add(".jut", "image/jutvision");
types.Add(".kar", "audio/midi");
types.Add(".ksh", "text/x-script.ksh");
types.Add(".la", "audio/nspaudio");
types.Add(".lam", "audio/x-liveaudio");
types.Add(".latex", "application/x-latex");
types.Add(".list", "text/plain");
types.Add(".lma", "audio/nspaudio");
types.Add(".log", "text/plain");
types.Add(".lsp", "application/x-lisp");
types.Add(".lst", "text/plain");
types.Add(".lsx", "text/x-la-asf");
types.Add(".ltx", "application/x-latex");
types.Add(".m", "text/plain");
types.Add(".m1v", "video/mpeg");
types.Add(".m2a", "audio/mpeg");
types.Add(".m2v", "video/mpeg");
types.Add(".m3u", "audio/x-mpequrl");
types.Add(".man", "application/x-troff-man");
types.Add(".map", "application/x-navimap");
types.Add(".mar", "text/plain");
types.Add(".mbd", "application/mbedlet");
types.Add(".mc$", "application/x-magic-cap-package-1.0");
types.Add(".mcd", "application/mcad");
types.Add(".mcf", "image/vasa");
types.Add(".mcp", "application/netmc");
types.Add(".me", "application/x-troff-me");
types.Add(".mht", "message/rfc822");
types.Add(".mhtml", "message/rfc822");
types.Add(".mid", "audio/midi");
types.Add(".midi", "audio/midi");
types.Add(".mif", "application/x-mif");
types.Add(".mime", "message/rfc822");
types.Add(".mjf", "audio/x-vnd.AudioExplosion.MjuiceMediaFile");
types.Add(".mjpg", "video/x-motion-jpeg");
types.Add(".mm", "application/base64");
types.Add(".mme", "application/base64");
types.Add(".mod", "audio/mod");
types.Add(".moov", "video/quicktime");
types.Add(".mov", "video/quicktime");
types.Add(".movie", "video/x-sgi-movie");
types.Add(".mp2", "video/mpeg");
types.Add(".mp3", "audio/mpeg3");
types.Add(".mpa", "audio/mpeg");
types.Add(".mpc", "application/x-project");
types.Add(".mpe", "video/mpeg");
types.Add(".mpeg", "video/mpeg");
types.Add(".mpg", "video/mpeg");
types.Add(".mpga", "audio/mpeg");
types.Add(".mpp", "application/vnd.ms-project");
types.Add(".mpt", "application/x-project");
types.Add(".mpv", "application/x-project");
types.Add(".mpx", "application/x-project");
types.Add(".mrc", "application/marc");
types.Add(".ms", "application/x-troff-ms");
types.Add(".mv", "video/x-sgi-movie");
types.Add(".my", "audio/make");
types.Add(".mzz", "application/x-vnd.AudioExplosion.mzz");
types.Add(".nap", "image/naplps");
types.Add(".naplps", "image/naplps");
types.Add(".nc", "application/x-netcdf");
types.Add(".ncm", "application/vnd.nokia.configuration-message");
types.Add(".nif", "image/x-niff");
types.Add(".niff", "image/x-niff");
types.Add(".nix", "application/x-mix-transfer");
types.Add(".nsc", "application/x-conference");
types.Add(".nvd", "application/x-navidoc");
types.Add(".oda", "application/oda");
types.Add(".omc", "application/x-omc");
types.Add(".omcd", "application/x-omcdatamaker");
types.Add(".omcr", "application/x-omcregerator");
types.Add(".p", "text/x-pascal");
types.Add(".p10", "application/pkcs10");
types.Add(".p12", "application/pkcs-12");
types.Add(".p7a", "application/x-pkcs7-signature");
types.Add(".p7c", "application/pkcs7-mime");
types.Add(".p7m", "application/pkcs7-mime");
types.Add(".p7r", "application/x-pkcs7-certreqresp");
types.Add(".p7s", "application/pkcs7-signature");
types.Add(".part", "application/pro_eng");
types.Add(".pas", "text/pascal");
types.Add(".pbm", "image/x-portable-bitmap");
types.Add(".pcl", "application/x-pcl");
types.Add(".pct", "image/x-pict");
types.Add(".pcx", "image/x-pcx");
types.Add(".pdb", "chemical/x-pdb");
types.Add(".pdf", "application/pdf");
types.Add(".pfunk", "audio/make");
types.Add(".pgm", "image/x-portable-graymap");
types.Add(".pic", "image/pict");
types.Add(".pict", "image/pict");
types.Add(".pkg", "application/x-newton-compatible-pkg");
types.Add(".pko", "application/vnd.ms-pki.pko");
types.Add(".pl", "text/plain");
types.Add(".plx", "application/x-PiXCLscript");
types.Add(".pm", "image/x-xpixmap");
types.Add(".pm4", "application/x-pagemaker");
types.Add(".pm5", "application/x-pagemaker");
types.Add(".png", "image/png");
types.Add(".pnm", "application/x-portable-anymap");
types.Add(".pot", "application/mspowerpoint");
types.Add(".pov", "model/x-pov");
types.Add(".ppa", "application/vnd.ms-powerpoint");
types.Add(".ppm", "image/x-portable-pixmap");
types.Add(".pps", "application/mspowerpoint");
types.Add(".ppt", "application/mspowerpoint");
types.Add(".ppz", "application/mspowerpoint");
types.Add(".pre", "application/x-freelance");
types.Add(".prt", "application/pro_eng");
types.Add(".ps", "application/postscript");
types.Add(".pvu", "paleovu/x-pv");
types.Add(".pwz", "application/vnd.ms-powerpoint");
types.Add(".py", "text/x-script.phyton");
types.Add(".pyc", "applicaiton/x-bytecode.python");
types.Add(".qcp", "audio/vnd.qcelp");
types.Add(".qd3", "x-world/x-3dmf");
types.Add(".qd3d", "x-world/x-3dmf");
types.Add(".qif", "image/x-quicktime");
types.Add(".qt", "video/quicktime");
types.Add(".qtc", "video/x-qtc");
types.Add(".qti", "image/x-quicktime");
types.Add(".qtif", "image/x-quicktime");
types.Add(".ra", "audio/x-pn-realaudio");
types.Add(".ram", "audio/x-pn-realaudio");
types.Add(".ras", "application/x-cmu-raster");
types.Add(".rast", "image/cmu-raster");
types.Add(".rexx", "text/x-script.rexx");
types.Add(".rf", "image/vnd.rn-realflash");
types.Add(".rgb", "image/x-rgb");
types.Add(".rm", "application/vnd.rn-realmedia");
types.Add(".rmi", "audio/mid");
types.Add(".rmm", "audio/x-pn-realaudio");
types.Add(".rmp", "audio/x-pn-realaudio");
types.Add(".rng", "application/ringing-tones");
types.Add(".rnx", "application/vnd.rn-realplayer");
types.Add(".roff", "application/x-troff");
types.Add(".rp", "image/vnd.rn-realpix");
types.Add(".rpm", "audio/x-pn-realaudio-plugin");
types.Add(".rss", "text/xml");
types.Add(".rt", "text/richtext");
types.Add(".rtf", "text/richtext");
types.Add(".rtx", "text/richtext");
types.Add(".rv", "video/vnd.rn-realvideo");
types.Add(".s", "text/x-asm");
types.Add(".s3m", "audio/s3m");
types.Add(".sbk", "application/x-tbook");
types.Add(".scm", "application/x-lotusscreencam");
types.Add(".sdml", "text/plain");
types.Add(".sdp", "application/sdp");
types.Add(".sdr", "application/sounder");
types.Add(".sea", "application/sea");
types.Add(".set", "application/set");
types.Add(".sgm", "text/sgml");
types.Add(".sgml", "text/sgml");
types.Add(".sh", "text/x-script.sh");
types.Add(".shar", "application/x-bsh");
types.Add(".shtml", "text/html");
types.Add(".sid", "audio/x-psid");
types.Add(".sit", "application/x-sit");
types.Add(".skd", "application/x-koan");
types.Add(".skm", "application/x-koan");
types.Add(".skp", "application/x-koan");
types.Add(".skt", "application/x-koan");
types.Add(".sl", "application/x-seelogo");
types.Add(".smi", "application/smil");
types.Add(".smil", "application/smil");
types.Add(".snd", "audio/basic");
types.Add(".sol", "application/solids");
types.Add(".spc", "application/x-pkcs7-certificates");
types.Add(".spl", "application/futuresplash");
types.Add(".spr", "application/x-sprite");
types.Add(".sprite", "application/x-sprite");
types.Add(".src", "application/x-wais-source");
types.Add(".ssi", "text/x-server-parsed-html");
types.Add(".ssm", "application/streamingmedia");
types.Add(".sst", "application/vnd.ms-pki.certstore");
types.Add(".step", "application/step");
types.Add(".stl", "application/sla");
types.Add(".stp", "application/step");
types.Add(".sv4cpio", "application/x-sv4cpio");
types.Add(".sv4crc", "application/x-sv4crc");
types.Add(".svf", "image/x-dwg");
types.Add(".svr", "application/x-world");
types.Add(".swf", "application/x-shockwave-flash");
types.Add(".t", "application/x-troff");
types.Add(".talk", "text/x-speech");
types.Add(".tar", "application/x-tar");
types.Add(".tbk", "application/toolbook");
types.Add(".tcl", "text/x-script.tcl");
types.Add(".tcsh", "text/x-script.tcsh");
types.Add(".tex", "application/x-tex");
types.Add(".texi", "application/x-texinfo");
types.Add(".texinfo", "application/x-texinfo");
types.Add(".text", "text/plain");
types.Add(".tgz", "application/x-compressed");
types.Add(".tif", "image/tiff");
types.Add(".tiff", "image/tiff");
types.Add(".tr", "application/x-troff");
types.Add(".tsi", "audio/tsp-audio");
types.Add(".tsp", "audio/tsplayer");
types.Add(".tsv", "text/tab-separated-values");
types.Add(".turbot", "image/florian");
types.Add(".txt", "text/plain");
types.Add(".uil", "text/x-uil");
types.Add(".uni", "text/uri-list");
types.Add(".unis", "text/uri-list");
types.Add(".unv", "application/i-deas");
types.Add(".uri", "text/uri-list");
types.Add(".uris", "text/uri-list");
types.Add(".ustar", "multipart/x-ustar");
types.Add(".uu", "text/x-uuencode");
types.Add(".uue", "text/x-uuencode");
types.Add(".vcd", "application/x-cdlink");
types.Add(".vcs", "text/x-vCalendar");
types.Add(".vda", "application/vda");
types.Add(".vdo", "video/vdo");
types.Add(".vew", "application/groupwise");
types.Add(".viv", "video/vivo");
types.Add(".vivo", "video/vivo");
types.Add(".vmd", "application/vocaltec-media-desc");
types.Add(".vmf", "application/vocaltec-media-file");
types.Add(".voc", "audio/voc");
types.Add(".vos", "video/vosaic");
types.Add(".vox", "audio/voxware");
types.Add(".vqe", "audio/x-twinvq-plugin");
types.Add(".vqf", "audio/x-twinvq");
types.Add(".vql", "audio/x-twinvq-plugin");
types.Add(".vrml", "application/x-vrml");
types.Add(".vrt", "x-world/x-vrt");
types.Add(".vsd", "application/x-visio");
types.Add(".vst", "application/x-visio");
types.Add(".vsw", "application/x-visio");
types.Add(".w60", "application/wordperfect6.0");
types.Add(".w61", "application/wordperfect6.1");
types.Add(".w6w", "application/msword");
types.Add(".wav", "audio/wav");
types.Add(".wb1", "application/x-qpro");
types.Add(".wbmp", "image/vnd.wap.wbmp");
types.Add(".web", "application/vnd.xara");
types.Add(".wiz", "application/msword");
types.Add(".wk1", "application/x-123");
types.Add(".wmf", "windows/metafile");
types.Add(".wml", "text/vnd.wap.wml");
types.Add(".wmlc", "application/vnd.wap.wmlc");
types.Add(".wmls", "text/vnd.wap.wmlscript");
types.Add(".wmlsc", "application/vnd.wap.wmlscriptc");
types.Add(".word", "application/msword");
types.Add(".wp", "application/wordperfect");
types.Add(".wp5", "application/wordperfect");
types.Add(".wp6", "application/wordperfect");
types.Add(".wpd", "application/wordperfect");
types.Add(".wq1", "application/x-lotus");
types.Add(".wri", "application/mswrite");
types.Add(".wrl", "application/x-world");
types.Add(".wrz", "model/vrml");
types.Add(".wsc", "text/scriplet");
types.Add(".wsrc", "application/x-wais-source");
types.Add(".wtk", "application/x-wintalk");
types.Add(".xbm", "image/x-xbitmap");
types.Add(".xdr", "video/x-amt-demorun");
types.Add(".xgz", "xgl/drawing");
types.Add(".xif", "image/vnd.xiff");
types.Add(".xl", "application/excel");
types.Add(".xla", "application/excel");
types.Add(".xlb", "application/excel");
types.Add(".xlc", "application/excel");
types.Add(".xld", "application/excel");
types.Add(".xlk", "application/excel");
types.Add(".xll", "application/excel");
types.Add(".xlm", "application/excel");
types.Add(".xls", "application/excel");
types.Add(".xlt", "application/excel");
types.Add(".xlv", "application/excel");
types.Add(".xlw", "application/excel");
types.Add(".xm", "audio/xm");
types.Add(".xml", "text/xml");
types.Add(".xmz", "xgl/movie");
types.Add(".xpix", "application/x-vnd.ls-xpix");
types.Add(".xpm", "image/xpm");
types.Add(".x-png", "image/png");
types.Add(".xsr", "video/x-amt-showrun");
types.Add(".xwd", "image/x-xwd");
types.Add(".xyz", "chemical/x-pdb");
types.Add(".z", "application/x-compressed");
types.Add(".zip", "application/zip");
types.Add(".zsh", "text/x-script.zsh");
return types;
}
}
}
Here is the library: Suddenelfilio.ExtensionMethods.zip
Downloaded 204 times
