DES加解密,Java和C里面的填充内容的问题

DES加解密的时候遇到一个问题:C语言中不足八位填充的是‘\0’,我在Java中也是填的这个,但是加密后传给C程序解密失败,两边加密出来的内容不一致!!求教,怎么解决啊!!!C币用完了 求好心人

http://blog.csdn.net/xumaojun/article/details/17675905
C++

http://www.cnblogs.com/langtianya/p/3715975.html

Java

http://blog.csdn.net/sszgg2006/article/details/49148189
按照个解释,那你可以使用 空格 来填充。。

 ‘ ’

package com.nantian.des.test;

import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;

import com.nantian.des.test.AbcConvertUtil;

import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.spec.InvalidKeySpecException;

public class DesEcbCompatiblePhpUtil {

/**
 * 密钥算法
 */
private static final String ALGORITHM = "DES";
/**
 * 加解密算法/工作模式/填充方式
 */
private static final String ALGORITHM_STR = "DES/ECB/NoPadding";

private static final String CHARSET = "GBK";

/**
 * 填充内容
 */
private static final String PAD_STR = "\0";

public static void main(String[] args) throws Exception {
    String clearText = "222222  ";
    String key = "20653920";
    System.out.println("明文:" + clearText + "\n密钥:" + key);
    String encryptText = encrypt(clearText, key);
    System.out.println("加密后:" + encryptText);
}

public static String encrypt(String souce, String key) {
    try {
        return encryptByDes(pkcs5Pad(souce), key);
    } catch (Exception e) {
        System.err.println("加密数据: {}异常,原因:{},{}"+ souce+ e.getMessage()+ e);
    }

    return "";
}

private static String encryptByDes(final String souce, final String key) throws InvalidKeyException,
        NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException,
        IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
    // DES算法要求有一个可信任的随机数源
    SecureRandom sr = new SecureRandom();
    // 从原始密匙数据创建DESKeySpec对象
    DESKeySpec dks = new DESKeySpec(key.getBytes(CHARSET));
    // 创建一个密匙工厂,然后用它把DESKeySpec转换成 一个SecretKey对象
    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
    SecretKey key1 = keyFactory.generateSecret(dks);
    // Cipher对象实际完成加密操作
    Cipher cipher = Cipher.getInstance(ALGORITHM_STR);
    // 用密匙初始化Cipher对象
    cipher.init(Cipher.ENCRYPT_MODE, key1, sr);
    // 现在,获取数据并加密
    byte encryptedData[] = cipher.doFinal(souce.getBytes(CHARSET));

    return AbcConvertUtil.bytesToHexString(encryptedData);
}

private static String pkcs5Pad(final String souce) throws UnsupportedEncodingException {
    //密文和密钥的长度必须是8的倍数
    if (0 == souce.length() % 8) {
        return souce;
    }

    StringBuffer tmp = new StringBuffer(souce);

    while (0 != tmp.length() % 8) {
        tmp.append(PAD_STR);
    }
    return tmp.toString();
}

}

C语言的是用memset(temp,'\0',8)初始化,然后用memcpy()函数将要加密的字符串拷进去,不足八位后面自带了两个\0

C代码不能贴上来。。。。

SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);

 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");

跟别人的代码对比发现的差距。。本人C/C++