According to this topic you are not the first one who is looking for that algorithm. As already mentioned Progress is not willing to share much about this algorithm.
While it's most probably possible to do crack the algorithm, it's generally easier to use Progress itself to calculate hashes. The other option is to switch from using that Progress funtion to a more standard variants (like SHA-1).
Now, more clarification of what "variation" could possibly mean. Suppose something like:
string Encode(string pass) {
string salt = "123456";
return CRC16(pass + salt); // + for catenation
}
while it's still same CRC16 it will produce totally different results (comparing to CRC16(pass)
). So the only way to get real algorithm is to use disassembler to see the actual code, since it's probably impossible to do anything observing only input and output.
There is no "structural approach" to guess algorithm from input and result unless you have a pattern, and that's exactly that ideal hash need not to have.