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 tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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