17. juni 2008 - 17:24
Der er
10 kommentarer og 1 løsning
Oversættelse af C# til Java
Hejsa! 200 points til den som kan oversætte nedenstående krypterings algoritme fra C# til Java. public string Encrypt(string toEncrypt)//, string key, bool useHashing) { byte[] keyArray; byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt); keyArray = UTF8Encoding.UTF8.GetBytes("MySecretKey"); TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider(); tdes.Key = keyArray; tdes.Mode = CipherMode.ECB; tdes.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = tdes.CreateEncryptor(); byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); //BASE64 //return Convert.ToBase64String(resultArray, 0, resultArray.Length); //HEX byte[] keyAscii = Convert.FromBase64String(Convert.ToBase64String(resultArray, 0, resultArray.Length)); string keyHex = ConvertByteArrayToHexString(keyAscii); return keyHex; } private string ConvertByteArrayToHexString(byte[] bytes) { string hex = ""; foreach (byte b in bytes) { char c = (char)b; int tmp = c; hex += String.Format("{0:x2}", (uint)System.Convert.ToUInt32(tmp.ToString())); } return hex; } Mvh. MMN
Annonceindlæg fra FPT Software
public class TrippleDESEncrypt { static { Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); } public static String encrypt(String s) throws NoSuchAlgorithmException, NoSuchPaddingException, UnsupportedEncodingException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException { Cipher crypt = Cipher.getInstance("DESede/ECB/PKCS7Padding"); SecretKey key = new SecretKeySpec("MySecretKeyxxxxx".getBytes(), "DESede"); crypt.init(Cipher.ENCRYPT_MODE, key); byte[] plain = s.getBytes("UTF-8"); byte[] cipher = crypt.doFinal(plain, 0, plain.length); return toHex(cipher); } private static String toHex(byte[] ba) { char hexdigit[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; StringBuffer sb = new StringBuffer(""); for (int i = 0; i < ba.length; i++) { sb.append(hexdigit[(ba[i] >> 4) & 0x0F]); sb.append(hexdigit[ba[i] & 0x0F]); } return sb.toString(); } }
Jeg har paddet key'en til 16 bogstaver af indlysende aarsager. Den kraver at du henter og bruger BouncyCastle provider fordi standard provider ikke tilbyder PKCS7Padding (kun PKCS5Padding).
Hej Arne :-) Det ser fint ud, men for at kunne teste det, hvilke namespaces skal jeg importerer?
import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.Security; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec;
Takker. Den brokker sig dog stadig over en enkel ting: org.bouncycastle cannot be resolved to a type ??
Du skal hente BouncyVastle provider og putte den i classpath !
Hej igen! Du er min helt - endnu en gang ;) Kan du også vise mig hvordan Decrypt metoden ser ud, så er der 200 points på vej :-)
public static String decrypt(String s) throws NoSuchAlgorithmException, NoSuchPaddingException, UnsupportedEncodingException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException { Cipher crypt = Cipher.getInstance("DESede/ECB/PKCS7Padding"); SecretKey key = new SecretKeySpec("MySecretKeyxxxxx".getBytes(), "DESede"); crypt.init(Cipher.DECRYPT_MODE, key); byte[] cipher = fromHex(s); byte[] plain = crypt.doFinal(cipher, 0, cipher.length); return new String(plain, "UTF-8"); } private static byte[] fromHex(String s) { int n = s.length() / 2; byte[] res = new byte[n]; for(int i = 0; i < n; i++) { res[i] = (byte)(hexval(s.charAt(2 * i)) * 16 + hexval(s.charAt(2 * i + 1))); } return res; } private static int hexval(char c) { if(c >= '0' && c <= '9') { return c - '0'; } else if(c >= 'A' && c <= 'F') { return c - 'A' + 10; } else if(c >= 'a' && c <= 'f') { return c - 'a' + 10; } else { return 0; } }
18. juni 2008 - 03:29
#10
og et svar
18. juni 2008 - 18:30
#11
Hej Arne - testede det tidligere...det hele spiller! Du skal have SUPER mange tak for din uovertruffen ekspertise ;)
Kurser inden for grundlæggende programmering