user-0 提问: 3倍长 3DES算法，在线等，急！！

回复:
user: user-0
content: C版的高人呢？

user: user-1
content: 引用 2 楼 zhao4zhong1 的回复:不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如： A将请求数据写到文件a.txt，写完后改名为aa.txt B发现aa.txt存在时，读取其内容，调用相应功能，将结果写到文件b.txt，写完后删除aa.txt，改名为bb.txt A发现bb.txt存在时，读取其内容，读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境，B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢？  共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多，下面仅列出我现在能想到的： ·进程之间松耦合 ·进程可在同一台机器上，也可跨机，跨操作系统，跨硬件平台，甚至跨国。 ·方便调试和监视，只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务，只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务，而且几乎不可能发生队列满的情况（除非硬盘空间满） ·……+!

user: user-0
content: 急急急，各位帮帮忙

user: user-2
content: 不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如： A将请求数据写到文件a.txt，写完后改名为aa.txt B发现aa.txt存在时，读取其内容，调用相应功能，将结果写到文件b.txt，写完后删除aa.txt，改名为bb.txt A发现bb.txt存在时，读取其内容，读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境，B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢？  共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多，下面仅列出我现在能想到的： ·进程之间松耦合 ·进程可在同一台机器上，也可跨机，跨操作系统，跨硬件平台，甚至跨国。 ·方便调试和监视，只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务，只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务，而且几乎不可能发生队列满的情况（除非硬盘空间满） ·……

user: user-0
content: 对方的JAVA程序是这样的，我不懂JAVA啊： package com.suning.fsp.bof.utils;  import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.security.Key; import java.security.Provider;  import javax.crypto.Cipher; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESedeKeySpec; import javax.crypto.spec.IvParameterSpec;  import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.bouncycastle.util.encoders.Hex;  public class ThreeDesUtil {      private static final byte[] DEFAULT_IVPARAMS = new byte[8];     private static final String DEFAULT_DESKEYALGORITHM = "DESede";     private static final String DEFAULT_CIPHERALGORITHM = DEFAULT_DESKEYALGORITHM + "/" + "CBC" + "/" + "PKCS5Padding";     private static final char[] BCD_LOOKUP = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D',             'E', 'F' };      /**      * 以字节的方式读取文件      *       * @param fileName      */     public static byte[] readFileByByte(File file) {          InputStream in = null;         long length = file.length();         byte[] bytes = new byte[(int) length];         int offset = 0;         int numRead = 0;         try {             in = new FileInputStream(file);             while (offset < bytes.length && (numRead = in.read(bytes, offset, bytes.length - offset)) >= 0) {                 offset += numRead;             }             if (offset < bytes.length) {                 throw new IOException("Could not completely read file " + file.getName());             }          } catch (Exception e) {             e.printStackTrace();         } finally {             if (in != null) {                 try {                     in.close();                 } catch (IOException ex) {                     ex.printStackTrace();                 }             }         }         return bytes;     }      public static byte[] encryptBy3Des(byte[] input, String key) throws Exception {         if (input == null || input.length == 0) {             return new byte[] {};         }         Cipher encryptCipher = getDesCipher(Cipher.ENCRYPT_MODE, key);         return encryptCipher.doFinal(input);     }      public static String encryptBy3DesInHex(byte[] input, String key) throws Exception {         byte[] encrypt = encryptBy3Des(input, key);         return bytesToHexStr(encrypt);     }      private static Cipher getDesCipher(int mode, String key) throws Exception {         Key desKey = getDesKey(key);         Cipher cipher = Cipher.getInstance(getDESCipherAlgorithm(), getProvider());         cipher.init(mode, desKey, new IvParameterSpec(getIVParamsContent()));          return cipher;     }      private static String getDESCipherAlgorithm() {         return DEFAULT_CIPHERALGORITHM;     }      private static Provider getProvider() {         return new org.bouncycastle.jce.provider.BouncyCastleProvider();     }      private static byte[] getIVParamsContent() {         return DEFAULT_IVPARAMS;     }      private static Key getDesKey(String keyStr) throws Exception {         byte input[] = Hex.decode(keyStr);         DESedeKeySpec keySpec = new DESedeKeySpec(input);         SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(getDESKeyAlgorithm(), getProvider());         return keyFactory.generateSecret(keySpec);     }      protected static String getDESKeyAlgorithm() {         return DEFAULT_DESKEYALGORITHM;     }      public static String bytesToHexStr(byte[] paramArrayOfByte) {         StringBuilder localStringBuilder = new StringBuilder(paramArrayOfByte.length * 2 + 1);         for (int i = 0; i < paramArrayOfByte.length; i++) {             localStringBuilder.append(BCD_LOOKUP[(paramArrayOfByte[i] >>> 4 & 0xF)]);             localStringBuilder.append(BCD_LOOKUP[(paramArrayOfByte[i] & 0xF)]);         }         return localStringBuilder.toString();     }      public static OutputStream getBufferedOutputStream(File paramFile) throws Exception {         return new BufferedOutputStream(FileUtils.openOutputStream(paramFile));     }      public static void closeOutputStream(OutputStream paramOutputStream) {         IOUtils.closeQuietly(paramOutputStream);     }      public static boolean persistFile(String paramString, File paramFile) throws Exception {         if (paramString == null || paramString.equals(""))             return false;         OutputStream localOutputStream = getBufferedOutputStream(paramFile);         IOUtils.write(paramString, localOutputStream);         closeOutputStream(localOutputStream);         return true;     }      public static boolean persistFile(byte[] paramArrayOfByte, File paramFile) throws Exception {         if (paramArrayOfByte == null || paramArrayOfByte.length == 0)             return false;         OutputStream localOutputStream = getBufferedOutputStream(paramFile);         IOUtils.write(paramArrayOfByte, localOutputStream);         localOutputStream.close();         return true;     }      public static boolean getEncryptFileInHexBy3Des(File origFile, File encryptFile, String key) throws Exception {         byte[] origFileArray = readFileByByte(origFile);         String hexContent = encryptBy3DesInHex(origFileArray, key);          return persistFile(hexContent, encryptFile);     }      public static String getFileContent(File paramFile) throws Exception {         FileInputStream localFileInputStream = FileUtils.openInputStream(paramFile);         String str = "";         try {             str = IOUtils.toString(localFileInputStream);          } catch (Exception e) {             e.printStackTrace();         } finally {             IOUtils.closeQuietly(localFileInputStream);         }         return str;     }      public static byte[] hexStrToBytes(String paramString) {         byte[] arrayOfByte = new byte[paramString.length() / 2];         int i = 0;         int j = arrayOfByte.length;         while (i < j) {             arrayOfByte[i] = (byte) Integer.parseInt(paramString.substring(2 * i, 2 * i + 2), 16);             i++;         }         return arrayOfByte;     }      public static byte[] decryptBy3DesInHex(String hexContent, String key) throws Exception {         byte[] input = hexStrToBytes(hexContent);         return decryptBy3Des(input, key);     }      public static byte[] decryptBy3Des(byte[] input, String key) throws Exception {         if (input == null || input.length == 0) {             return new byte[] {};         }         Cipher decryptCipher = getDesCipher(Cipher.DECRYPT_MODE, key);         return decryptCipher.doFinal(input);     }      public static boolean getDecryptFileInHexBy3Des(File encryptFile, File origFile, String key) throws Exception {         String hexEncrptContent = getFileContent(encryptFile);         byte[] decryptArray = decryptBy3DesInHex(hexEncrptContent, key);         return persistFile(decryptArray, origFile);     }      public static void main(String[] args) {         File origFile = new File("d:\\27_suning_yield_20131009.txt");         File tFile = new File("d:\\partner.zip");         File encryptFile = new File("c://opt/epp/sharefile/recon/fsp/internal/27__suning_yield_20131008.zip");         // c:\\\opt\epp\sharefile\recon\fsp\internal\27__suning_yield_20131008.zip         String key = "1234567890qwertyuiopasdfghjklmnbvcxz123456123451";         try {             // new ThreeDesUtil().getEncryptFileInHexBy3Des(origFile, encryptFile, key); // ����             new ThreeDesUtil().getDecryptFileInHexBy3Des(encryptFile, tFile, key); // ����         } catch (Exception e) {             // TODO Auto-generated catch block             e.printStackTrace();         }         System.out.println("end");     } }