这个其实要看你是怎么处理,最后在后台接收就处理
看一下加密的方式是什么
密钥一般都是字节数组,直接base64后转成字符串保存就好了
Base64的包导入没问题吗
这个需要单独添加一个jar包,是apache下面的commons jar包,你可以下载老师上传的jar包,其实我觉得没有必要,可以用HexBin.encode(result)也能达到效果。
HexBin.encode(result);用这个
包是commons-codec-1.10.jar
在程序里导入包的时候要正确导入 import org.apache.commons.codec.binary.Base64;
public class KkltHmac {
public static final String src = "hmac test";
public static void main(String[] args) {
jdkHmacMD5();
bcHmacMD5();
}
public static void jdkHmacMD5(){
KeyGenerator hmacMD5 = null;
try
{
// 初始化KeyGenerator
KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5");
// 产生密钥
SecretKey secretKey = keyGenerator.generateKey();
// 获取密钥
// byte[] key = secretKey.getEncoded();
byte[] key = Hex.decodeHex(new char[]{'1','2','3','4','5','6','7','8','9','a','b','c','d','e' });
// 还原密钥
SecretKey restoreSecretKey = new SecretKeySpec(key, "HmacMD5");
// 实例化MAC
Mac mac = Mac.getInstance(restoreSecretKey.getAlgorithm());
// 初始化MAC
mac.init(restoreSecretKey);
// 执行摘要
byte[] hmacMD5Bytes = mac.doFinal(src.getBytes());
System.out.println("jdk hmacMD5:" + Hex.encodeHexString(hmacMD5Bytes));
} catch (Exception e) {
e.printStackTrace();
}
}
// 用bouncy castle实现:
public static void bcHmacMD5()
{
HMac hmac = new HMac(new MD5Digest());
// 必须是16进制的字符,长度必须是2的倍数
hmac.init(new KeyParameter(org.bouncycastle.util.encoders.Hex.decode("123456789abcde")));
hmac.update(src.getBytes(), 0, src.getBytes().length);
// 执行摘要
byte[] hmacMD5Bytes = new byte[hmac.getMacSize()];
hmac.doFinal(hmacMD5Bytes, 0);
System.out.println("bc hmacMD5:" + org.bouncycastle.util.encoders.Hex.toHexString(hmacMD5Bytes));
}
}
把src改成你的名字即可
不是太安全 但可以学习下他它的思想,然后混合加密
一个byte数组定义的密钥,一个是采用加密算法加密后的密钥
你想问的是C语言的实现吧,我觉得只要C语言有java中实现这些加密的jar包,应该就可以吧,我也不知道C有没有这些jar包
找到问题了
//实例化DES的相关内容
DESedeKeySpec desKeySpec = new DESedeKeySpec(byteskey);
是这个没改对
org.apache.commons.codec.binary.Hex
应该是没导入cc或者是bc的包吧
写错了DES/ECB/PKCSSPadding 应该是DES/ECB/PKCS5Padding CS5 写成了css
加密完成后,成为byte数据,通过io流进行传输,再根据相应加解密方式进行解密
可以简单的这样实现:
import java.security.Key; import java.util.Scanner; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import org.apache.commons.codec.binary.Hex; public class TestDES { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("请输入需要加密的内容:"); String src = input.nextLine(); jdkDES(src); input.close(); } public static void jdkDES(String src) { try { //生成key KeyGenerator keyGenerator = KeyGenerator.getInstance("DES"); SecretKey secretKey = keyGenerator.generateKey(); byte[] byteKey = secretKey.getEncoded(); //转换Key DESKeySpec desKeySpec = new DESKeySpec(byteKey); SecretKeyFactory factory = SecretKeyFactory.getInstance("DES"); Key convertSecretKey = factory.generateSecret(desKeySpec); //加密 Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, convertSecretKey); byte[] result = cipher.doFinal(src.getBytes()); System.out.println("jdk des encrypt: " + Hex.encodeHexString(result)); //解密 cipher.init(Cipher.DECRYPT_MODE, convertSecretKey); result = cipher.doFinal(result); System.out.println("jdk des decrypt: " + new String(result)); } catch (Exception e) { e.printStackTrace(); } } }
password可以认为是密钥,但是除password之外,实际还要设置IV属性。之后用generateKey生成的是最终的key,也就是加密使用的key