By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
443,934 Members | 1,318 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 443,934 IT Pros & Developers. It's quick & easy.

converting python to c# .net

P: 2
Hi I have a very limited understanding of Python and have given this the best shot i have but still have not been able to get it working.
Is there anyone that knows how to get this into a .net assembly?

Expand|Select|Wrap|Line Numbers
  1. _________________________________________________________
  2. def encrypt_password(challenge, password):
  3.     if challenge['algorithm'] == 'md5':
  4.         inner = md5(challenge['salt'] + password).hexdigest()
  5.     elif challenge['algorithm'] == 'sha1':
  6.         inner = sha(challenge['salt'] + password).hexdigest()
  7.     else:
  8.         raise NotImplementedError(
  9.             "Password encryption algorithm '%s' not implemented." %
  10.             challenge['algorithm'])
  11.     return md5(inner + challenge['nonce']).hexdigest()
  12. _________________________________________________________
This is my attempt at this:

Expand|Select|Wrap|Line Numbers
  1. _________________________________________________________
  2.  
  3.         public static String GetEncryptedPassword(String password, String username)
  4.         {
  5.             INoncesChallengeUser proxyNoncesChallengeUser = XmlRpcProxyGen.Create<INoncesChallengeUser>();
  6.             XmlRpcStruct NoncesChallengeUser = proxyNoncesChallengeUser.GetNoncesChallengeUser(username);
  7.  
  8.             StringBuilder s = new StringBuilder();
  9.             String nonce = (String)NoncesChallengeUser["nonce"];
  10.             String salt = (String)NoncesChallengeUser["salt"];
  11.             String algorithm = (String)NoncesChallengeUser["algorithm"];
  12.  
  13.             byte[] nonceBytes = new byte[nonce.Length];
  14.             byte[] saltBytes = new byte[salt.Length];
  15.             byte[] passwordBytes = new byte[password.Length];
  16.             byte[] algorithmBytes = new byte[salt.Length + password.Length];
  17.             byte[] InnerBytes;
  18.  
  19.             saltBytes = Encoding.UTF8.GetBytes(salt);
  20.             passwordBytes = Encoding.UTF8.GetBytes(password);
  21.             nonceBytes = Encoding.UTF8.GetBytes(nonce);
  22.  
  23.             //Copy password bytes into resulting array
  24.             for (int i = 0; i < passwordBytes.Length; i++)
  25.                 algorithmBytes[i] = passwordBytes[i];
  26.  
  27.             //Append salt bytes to the resulting array.
  28.             for (int i = 0; i < saltBytes.Length; i++)
  29.                 algorithmBytes[saltBytes.Length + i] = saltBytes[i];
  30.  
  31.             switch (algorithm.ToUpper())
  32.             {
  33.                 case "SHA1":
  34.                     //String encrypted_password = md5(sha1(salt + password) + nonce);
  35.                     SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider();
  36.                     InnerBytes = sha1.ComputeHash(algorithmBytes);
  37.                     break;
  38.  
  39.                 default: //MD5
  40.                     //String encrypted_password = md5(sha1(salt + password) + nonce);
  41.                     MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
  42.                     InnerBytes = md5.ComputeHash(algorithmBytes);
  43.                     break;
  44.             }
  45.  
  46.             //Create finalEncryptedPassword array
  47.             byte[] encryptedPasswordBytes = new byte[InnerBytes.Length + nonceBytes.Length];
  48.  
  49.             //Copy inner bytes into resulting array
  50.             for (int i = 0; i < InnerBytes.Length; i++)
  51.                 encryptedPasswordBytes[i] = InnerBytes[i];
  52.  
  53.             //Append nonce bytes to the resulting array.
  54.             for (int i = 0; i < nonceBytes.Length; i++)
  55.                 encryptedPasswordBytes[InnerBytes.Length + i] = nonceBytes[i];
  56.  
  57.             //Now do the final md5 Encryption
  58.             byte[] finalEncryptedPasswordBytes = new byte[32];
  59.             MD5CryptoServiceProvider md5Final = new MD5CryptoServiceProvider();
  60.             finalEncryptedPasswordBytes = md5Final.ComputeHash(encryptedPasswordBytes);
  61.  
  62.             foreach (byte b in finalEncryptedPasswordBytes)
  63.             {
  64.                 s.Append(b.ToString("x2").ToLower());
  65.             }
  66.             return s.ToString();
  67.         }
  68. _________________________________________________________
Mar 12 '09 #1
Share this Question
Share on Google+
6 Replies


tlhintoq
Expert 2.5K+
P: 3,525
Looks like the long way around to me.
If all you're looking to do is encode a password or some other text maybe this will help get you on your way.

Expand|Select|Wrap|Line Numbers
  1. using System.Security;
  2. using System.Security.Cryptography;
  3. using System.Globalization;
  4.  
  5.         public static string EncodePassword(string originalPassword)
  6.         {
  7.             //Declarations
  8.             Byte[] originalBytes;
  9.             Byte[] encodedBytes;
  10.             MD5 md5;
  11.  
  12.             //Instantiate MD5CryptoServiceProvider, get bytes for original password and compute hash (encoded password)
  13.             md5 = new MD5CryptoServiceProvider();
  14.             originalBytes = ASCIIEncoding.Default.GetBytes(originalPassword);
  15.             encodedBytes = md5.ComputeHash(originalBytes);
  16.  
  17.             //Convert encoded bytes back to a 'readable' string
  18.             return BitConverter.ToString(encodedBytes);
  19.         }
  20.  
  21.  
Mar 12 '09 #2

P: 2
Thanks for your speedy response, I've revised the code and yes its way neater but i still don't seem to be getting the correct response.

Expand|Select|Wrap|Line Numbers
  1.         public static String GetEncryptedPassword(String password, String username)
  2.         {
  3.             INoncesChallengeUser proxyNoncesChallengeUser = XmlRpcProxyGen.Create<INoncesChallengeUser>();
  4.             XmlRpcStruct NoncesChallengeUser = proxyNoncesChallengeUser.GetNoncesChallengeUser(username);
  5.  
  6.             String nonce = (String)NoncesChallengeUser["nonce"];
  7.             String salt = (String)NoncesChallengeUser["salt"];
  8.             String algorithm = (String)NoncesChallengeUser["algorithm"];
  9.             String inner;
  10.             String final;
  11.  
  12.             //encrypted_password = md5(sha1(salt + password) + nonce);
  13.             if (algorithm.ToUpper() == "SHA1")
  14.                 inner = Sha1EncodePassword(salt + password);
  15.             else
  16.                 inner = Md5EncodePassword(salt + password);
  17.  
  18.             final = Md5EncodePassword(inner + nonce);
  19.             return final;
  20.         }
  21.  
  22.         private static string Md5EncodePassword(string originalPassword)
  23.         {
  24.             //Declarations
  25.             Byte[] originalBytes;
  26.             Byte[] encodedBytes;
  27.             MD5 md5;
  28.  
  29.             //Instantiate MD5CryptoServiceProvider, get bytes for original password and compute hash (encoded password)
  30.             md5 = new MD5CryptoServiceProvider();
  31.             originalBytes = ASCIIEncoding.Default.GetBytes(originalPassword);
  32.             encodedBytes = md5.ComputeHash(originalBytes);
  33.  
  34.             //Convert encoded bytes back to a 'readable' string
  35.             return BitConverter.ToString(encodedBytes).ToLower();
  36.         }
  37.  
  38.         private static string Sha1EncodePassword(string originalPassword)
  39.         {
  40.             //Declarations
  41.             Byte[] originalBytes;
  42.             Byte[] encodedBytes;
  43.             SHA1 sha1;
  44.  
  45.             //Instantiate MD5CryptoServiceProvider, get bytes for original password and compute hash (encoded password)
  46.             sha1 = new SHA1CryptoServiceProvider();
  47.             originalBytes = ASCIIEncoding.Default.GetBytes(originalPassword);
  48.             encodedBytes = sha1.ComputeHash(originalBytes);
  49.  
  50.             //Convert encoded bytes back to a 'readable' string
  51.             return BitConverter.ToString(encodedBytes).ToLower();
  52.         }
Mar 13 '09 #3

bvdet
Expert Mod 2.5K+
P: 2,851
ogtheterror

In the future, please use code tags when posting code.

posting guidelines

-BV
Moderator
Mar 13 '09 #4

tlhintoq
Expert 2.5K+
P: 3,525
Thanks for your speedy response, I've revised the code and yes its way neater but i still don't seem to be getting the correct response.
Feel free to expand on that... What *are* you getting and in what way is it not what you were expecting? Are you getting errors, crashes, or just not what you thought you would get and how?
Mar 13 '09 #5

P: 4
Hi all!
I'm looking in google found some code in python to unwrap package in oracle. But I don't know it.Some one help me to convert it to C# or Java. Please.
Thanks.!

Expand|Select|Wrap|Line Numbers
  1. import re
  2. import base64
  3. import zlib
  4. import sys
  5.  
  6. # simple substitution table
  7. charmap = [0x3d, 0x65, 0x85, 0xb3, 0x18, 0xdb, 0xe2, 0x87, 0xf1, 0x52, 0xab, 0x63, 0x4b, 0xb5, 0xa0, 0x5f, 0x7d, 0x68, 0x7b, 0x9b, 0x24, 0xc2, 0x28, 0x67, 0x8a, 0xde, 0xa4, 0x26, 0x1e, 0x03, 0xeb, 0x17, 0x6f, 0x34, 0x3e, 0x7a, 0x3f, 0xd2, 0xa9, 0x6a, 0x0f, 0xe9, 0x35, 0x56, 0x1f, 0xb1, 0x4d, 0x10, 0x78, 0xd9, 0x75, 0xf6, 0xbc, 0x41, 0x04, 0x81, 0x61, 0x06, 0xf9, 0xad, 0xd6, 0xd5, 0x29, 0x7e, 0x86, 0x9e, 0x79, 0xe5, 0x05, 0xba, 0x84, 0xcc, 0x6e, 0x27, 0x8e, 0xb0, 0x5d, 0xa8, 0xf3, 0x9f, 0xd0, 0xa2, 0x71, 0xb8, 0x58, 0xdd, 0x2c, 0x38, 0x99, 0x4c, 0x48, 0x07, 0x55, 0xe4, 0x53, 0x8c, 0x46, 0xb6, 0x2d, 0xa5, 0xaf, 0x32, 0x22, 0x40, 0xdc, 0x50, 0xc3, 0xa1, 0x25, 0x8b, 0x9c, 0x16, 0x60, 0x5c, 0xcf, 0xfd, 0x0c, 0x98, 0x1c, 0xd4, 0x37, 0x6d, 0x3c, 0x3a, 0x30, 0xe8, 0x6c, 0x31, 0x47, 0xf5, 0x33, 0xda, 0x43, 0xc8, 0xe3, 0x5e, 0x19, 0x94, 0xec, 0xe6, 0xa3, 0x95, 0x14, 0xe0, 0x9d, 0x64, 0xfa, 0x59, 0x15, 0xc5, 0x2f, 0xca, 0xbb, 0x0b, 0xdf, 0xf2, 0x97, 0xbf, 0x0a, 0x76, 0xb4, 0x49, 0x44, 0x5a, 0x1d, 0xf0, 0x00, 0x96, 0x21, 0x80, 0x7f, 0x1a, 0x82, 0x39, 0x4f, 0xc1, 0xa7, 0xd7, 0x0d, 0xd1, 0xd8, 0xff, 0x13, 0x93, 0x70, 0xee, 0x5b, 0xef, 0xbe, 0x09, 0xb9, 0x77, 0x72, 0xe7, 0xb2, 0x54, 0xb7, 0x2a, 0xc7, 0x73, 0x90, 0x66, 0x20, 0x0e, 0x51, 0xed, 0xf8, 0x7c, 0x8f, 0x2e, 0xf4, 0x12, 0xc6, 0x2b, 0x83, 0xcd, 0xac, 0xcb, 0x3b, 0xc4, 0x4e, 0xc0, 0x69, 0x36, 0x62, 0x02, 0xae, 0x88, 0xfc, 0xaa, 0x42, 0x08, 0xa6, 0x45, 0x57, 0xd3, 0x9a, 0xbd, 0xe1, 0x23, 0x8d, 0x92, 0x4a, 0x11, 0x89, 0x74, 0x6b, 0x91, 0xfb, 0xfe, 0xc9, 0x01, 0xea, 0x1b, 0xf7, 0xce]
  8.  
  9. def decode_base64_package(base64str):
  10.     base64dec = base64.b64decode(base64str)[20:] # we strip the first 20 chars (SHA1 hash, I don't bother checking it at the moment)
  11.     decoded = ''
  12.     for byte in range(0, len(base64dec)):
  13.         decoded += chr(charmap[ord(base64dec[byte])])
  14.     return zlib.decompress(decoded)
  15.  
  16.  
  17. sys.stderr.write("=== Oracle 10g/11g PL/SQL unwrapper - by Niels Teusink - blog.teusink.net ===\n\n" )
  18. if len(sys.argv) < 2:
  19.     sys.stderr.write("Usage: %s infile.plb [outfile]\n" % sys.argv[0])
  20.     sys.exit(1)
  21.  
  22. infile = open(sys.argv[1])
  23. outfile = None
  24. if len(sys.argv) == 3:
  25.     outfile = open(sys.argv[2], 'w')
  26.  
  27. lines = infile.readlines()
  28. if outfile:
  29. for i in range(0, len(lines)):
  30.     # this is really naive parsing, but works on every package I've thrown at it
  31.     matches = re.compile(r"^[0-9a-f]+ ([0-9a-f]+)$").match(lines[i])
  32.     if matches:
  33.         base64len = int(matches.groups()[0], 16)
  34.         #print matches.groups()[0]
  35.         base64str = ''
  36.         j = 0
  37.         #print base64len
  38.         while len(base64str) < base64len:
  39.             j+=1
  40.             base64str += lines[i+j]
  41.             #print j
  42.         base64str = base64str.replace("\n","")
  43.  
  44.         if outfile:
  45.             outfile.write(decode_base64_package(base64str) + "\n")
  46.         else:
  47.             print decode_base64_package(base64str)
  48. print "Unwrap is successfully!"
  49.  
  50.  
Jun 29 '10 #6

P: 3
@toanmh
hello all, migrate the python code to IronPython, but I have problems with the zlib library, there is no way to load the program.
Anyone know how I can load this library.
Jul 25 '10 #7

Post your reply

Sign in to post your reply or Sign up for a free account.