Wikipedia:Reference desk/Archives/Computing/2015 May 29

Computing desk
< May 28 << Apr | May | Jun >> May 30 >
Welcome to the Wikipedia Computing Reference Desk Archives
The page you are currently viewing is an archive page. While you can leave answers for any questions shown below, please ask new questions on one of the current reference desk pages.


May 29 edit

Steps to get MD5 hash of string? edit

Hello, how would I calculate an MD5 hash of a string? What steps would I take, and what algorithms are involved? Thanks in advance. —SGA314 (talk) 14:23, 29 May 2015 (UTC)[reply]

It is a bit pointless to reinvent this. Most programming languages and database engines have an MD5 function. 209.149.115.214 (talk) 14:40, 29 May 2015 (UTC)[reply]
You read the part in our article that MD5 is now considered insecure, right? Rather than creating your own program for scratch, you will most likely find an algorithm included in the standard library of whatever programming language and operating system you prefer. If you state which you use, someone can probably point you to the appropriate library function. Jc3s5h (talk) 14:43, 29 May 2015 (UTC)[reply]
I am using VBA (Visual Basic for Applications) which is based on VB6. And No, it does not have a library for doing MD5(Not that I have found anyway). So reinventing this i guess is necessary. Sorry I am using such an old language. —SGA314 (talk) 17:02, 29 May 2015 (UTC)[reply]
The solution I would implement, if I was so constrained, is to use Visual Basic for Applications to call into a native library that implements MD5. For example, you can create a wrapper library around the official Windows .NET implementation of MD5, and then you can use VBA to declare the Lib (with a path to the DLL) that implements that feature.
Not all Visual Basic for Applications environments allow you to do this: some are sandboxed (for good reason) and prevent execution of native code.
Even if you can call native code, this is not a great solution altogether: almost every experienced programmer will strongly encourage you to stop relying on such very old (and proprietary) technologies. Microsoft strongly advises you to update to Visual Basic .NET (an environment in which you would not need to link against external libraries). If you still pursue this, it is up to you to find (or create) a library (DLL) that implements the feature you need.
One last alternative is to find (or create) an implementation of the md5 algorithm in VBA. This is not impossible, but it will not be fun.
You should strongly seek to relieve these constraints by switching to a newer incarnation of your technology platform. Microsoft introduced .NET technology for application scripting in 2001, and Microsoft has ceased supporting VBA since 2007. If you pursue a VBA solution, you are, in effect, constraining yourself to a proprietary and obsolete platform.
Nimur (talk) 18:56, 29 May 2015 (UTC)[reply]
Yes, I do understand that this is very old and outdated. However, it is a cool little challenge(I like challenging my self). So how would i create a wrapper around the System.Security library? I am using VBA in MS Word 2007(just open word 07 and go to the developer tab and click on Visual Basic button). Now I can't add a reference to the System.Security Dll(I found this in C:\Windows\Microsoft.NET\Framework\v4.0.30319) because every time i try to add a reference it gives me an error saying, "Can't add a reference to the specified file." Any way around this? Or is this a "sandboxed" environment like you were talking about? So worse case scenario I would have to create my own MD5 function. What would be the steps to do so if I can't create a wrapper around an MD5 library? That comes to my second question. What did you mean by, "For example, you can create a wrapper library around the official Windows .NET implementation of MD5, and then you can use VBA to declare the Lib (with a path to the DLL) that implements that feature." So, can you expound on that. What does that entail? Thanks for all of you help so far. I know I am using a very old and unsupported language, but like I said before, I like to challenge my self. I like to push the limits of what a language can do, you know. And if VBA dosen't have a built in MD5 hasher, then I would like to build one. Its just fun for me, whether its hard or not. Thanks, —SGA314 (talk) 19:47, 29 May 2015 (UTC)[reply]
So, you're set on the course of using obsolete technology... well, that's fine! But here's another problem: there is no documentation. Take a look at MSDN's website: they do not have any online reference documentation for APIs or programming guidelines for VBA. This technology is a few decades old and has been deprecated since the start of this century.
You're going to have to find the library of some old programmer hoarder who has kept his or her books and CDs from the 1990s if you want API documentation.
I found one website: on external library references for VBA. This isn't a tutorial or a how-to guide: it's a quick reference to jog your memory in case you need to jiggle some bits to make some old system work on a new platform. But you can follow the procedure, and play this puzzle-game to its conclusion, if you want: you're going to need an external library, and you can specify its path using the External References guide. Where is the DLL going to come from? Well, you'll probably have to make it yourself, using modern technology, and cause it to be conformant to the VBA External Objects model (for which we lack free online documentation)!
I think it's great that you're trying to do something just because it's difficult, but there are different types of difficulty in the field of computing. The type you are engaging in is the sort that professional programmers dread - we don't even want to get paid to tackle this kind of problem.
If you want a fun and entertaining problem that is also very difficult, consider writing a from-scratch implementation of MD5, by following the pseudocode described in our algorithm. If you still want to write this in VBA, that would be fine... but it won't make the problem any easier or harder (except that your end result won't be particularly portable!) You would do equally well to program this algorithm in python or C (or even in lisp: it's been done once or twice before)!
Nimur (talk) 21:02, 29 May 2015 (UTC)[reply]
Ok, I have looked at the Pseudocode and I don't understand it. Can you explain how each part of this Pseudocode works? —SGA314 (talk) 14:56, 1 June 2015 (UTC)[reply]
I don't think I can explain the algorithm any more simply than the pseudocode already does, unless I simplify and hand-wave to the extent that I'm no longer describing MD5. If we do this, we are no longer describing this algorithm, but are instead only vaguely and generically describing "hashing algorithms" at large.
Are you familiar with the primitive operations, such as append and bitwise shifts and rotates? Everything else in the algorithm is a for loop, a conditional statement, or a simple arithmetic addition. Our article, MD5, explains why we do each of these operations. If you would like the algorithm explained in different words, RFC1321 The MD5 Message-Digest Algorithm explains it in a different set of English words. If you would like the algorithm explained in a different language, RFC1321 also provides a reference implementation in the C programming language.
If you would like a simplified explanation, we can summarize and paraphrase: the algorithm iterates over the input string, and "chops and mixes" bits, producing other bits as output. The exact nature of these operations cannot be explained any more simply than to actually write the algorithm in pseudocode or in some other language: that is the minimally complex representation of which bits we "chop" and which bits we "mix." We can't simplify it any more: every single step is absolutely required, and exactly operates on each bit. Each bit is either a zero or a one (we can't make it any simpler!) Any change to the set of steps would be the implementation of some different algorithm. Each step is specifically selected because it provides some mathematical property. As it turns out, the "amount" of mixing and chopping that MD5 actually provides is quite poor compared to more modern algorithms like SHA-1, but it's still quite good compared to other algorithms like CRC-32. If you would like an explanation for this, I can direct you right back to the MD5 article, but this kind of algorithm analysis requires great familiarity with some topics of advanced mathematics.
Nimur (talk) 19:26, 1 June 2015 (UTC)[reply]
As Nimur says, programming a hash function like MD5 involves working with individual bits (i.e. the "1s and 0s"), so understanding the bitwise operations such as AND, OR, XOR, etc. is key. The pseudocode is actually straightforward once you understand the notation for these operations, and their intended purpose (i.e. why you are shifting bits from here to there). Here is a short tutorial on XOR encryption, which is a very basic (although still powerful) bitwise encryption algorithm: [1]; you might find it helpful to start with something easier like this, then work your way up to more complicated algorithms such as MD5.
Also, the notation used in the C programming language for bitwise operations (e.g. << for shift-left, ^ for XOR, etc.) is fairly standardized in most documentation, simply because C has historically been the language of choice for programming something like this. Of course, you'll need to learn how to do these operations in VBA: having done this, I will say that it IS possible, but you need to convert the bitwise operations into integer equivalents (e.g. multiplying by 2 instead of shifting left). I've only done a little bit of this, so whether VBA has sufficient capabilities to natively implement the MD5 hash is something you'll need to investigate. As for the other option Nimur mentioned (calling an outside implementation from VBA), while possible, it will likely be an absolute nightmare to pass an array back and forth to an external function without pointers: Google "VBA pass array to .DLL" for more on this.
I'm not trying to be a wet blanket--I program BIOS calls on CP/M using ED, so I love a good challenge; but personally, I'd pass on this one. OldTimeNESter (talk) 16:08, 2 June 2015 (UTC)[reply]

Topic was deleted a long time ago by an inactive user. edit

There was a page that was deleted quite some time ago that may be on a topic I could write about.

The page was LLUCE.

I am the person who wrote LLUCE for the company that was planning on publishing it. There is a reference to it already on the GBBS page, to which I did add some more information, including my name.

I would like to add information on this OS that was supposed to be the successor to ACOS as described however as I was the programmer who wrote it, there is nothing to cite at this point. I am considering placing the program into the Apple ][ portion at archive.com, but would like people to be able to check here so they know what they're looking at.

Andrew Wells — Preceding unsigned comment added by Llandyw (talkcontribs) 23:35, 29 May 2015 (UTC)[reply]

Wikipedia articles must be supported by reliable and verifiable sources - not Wikia pages, Facebook pages, and personal testimony. The LLUCE and ACOS articles were already deleted for this reason, and I've removed the material you added to GBBS for the same reason. In general, adding content to existing articles, or creating new articles, about yourself or projects with which you are closely associated is usually regarded as a conflict of interest, which that page notes is "strongly discouraged." Frankly, some things (most things) don't belong on Wikipedia - they haven't received mainstream coverage and never will, and their memory is much better curated in other sites where whose editorial standards don't require such strict sourcing. -- Finlay McWalterTalk 09:25, 30 May 2015 (UTC)[reply]