Posts Tagged csharp

How to calculate password hash in C# for Jira users?

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!

, , , , , , , , , ,

1 Comment

PART 2: How to get the mime type of a file using the name of a file in C#

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


      

, , , , , , , ,

2 Comments