java genaesencrypt_AES rijndael在c和java之间加密

我对c和Java之间的加密/解密感到疯狂,但到目前为止,Java中的加密字符串和c中的加密字符串看起来并不相同。 我已经调查了base64编码/解码但是在疯狂找到java和c的库后,各自的base64结果看起来不同了! 我认为这是在Java UTF16字符串之间进行转换,在java中保存字节或者AES选项(128/256密钥,PK5填充或谁知道什么),或者终端的UTF8转换或上述荒谬组合之间的转换问题。 到目前为止,我得到:user1@comp1:~/Desktop$ gcc AES.c /usr/lib/libmcrypt.a -lssl -lcrypto -lpthread

user1@comp1:~/Desktop$ /usr/java/jdk1.6.0_25/bin/javac AES.java

user1@comp1:~/Desktop$ ./a.out

Before encryption: test text 123

After encryption: 49 -60 66 43 -8 66 -106 0 -14 -44 3 47 65 127 -110 117

After decryption: test text 123

user1@comp1:~/Desktop$ java AES

Before encryption: test text 123

After encryption: -110 21 23 59 47 120 70 -93 -54 -93 -12 -70 -91 83 -113 85

After decryption: test text 123

我想我真的需要帮助,从某人到低级编码,下面分别是Java和c的代码:import java.security.MessageDigest;

import java.util.Arrays;

import javax.crypto.KeyGenerator;

import javax.crypto.SecretKey;

import javax.crypto.spec.SecretKeySpec;

import javax.crypto.spec.IvParameterSpec;

import javax.crypto.Cipher;

import javax.crypto.spec.IvParameterSpec;

import javax.crypto.spec.SecretKeySpec;

public class AES {

public static void main(String [] args) {

try {

String text = "test text 123";

/*fixed here now it is 128 bits = 16 Bytes*/

String encryptionKey = "E072EDF9534053A0";

System.out.println("Before encryption: " + text);

byte[] cipher = encrypt(text, encryptionKey);

System.out.print("After encryption: ");

for (int i=0; i和#include #include #include #include #include #include #include int main()

{

MCRYPT td, td2;

const char * plaintext = "test text 123";

int i;

char *key; /* created using mcrypt_gen_key */

char *IV;

char * block_buffer;

int blocksize;

int keysize = 16; /* 128 bits == 16 bytes */

size_t* sizet;

key = calloc(1, keysize);

/*below dirty trick to be sure the entire key has been padded with \0's */

strcpy(key, "E072EDF9534053A0");

memset(key, '\0', sizeof(key));

strcpy(key, "E072EDF9534053A0");

/*  MCRYPT mcrypt_module_open( char *algorithm, char* algorithm_directory, char* mode, char* mode_directory);

* This function normally returns an encryption descriptor, or MCRYPT_FAILED on error.

*/

td = mcrypt_module_open("rijndael-128", NULL, "cbc", NULL);

/*we need two encryption descriptors td and td2 for decryption*/

td2 = mcrypt_module_open("rijndael-128", NULL, "cbc", NULL);

blocksize = mcrypt_enc_get_block_size(td);

block_buffer = calloc(1, blocksize);

/*below to be sure the entire block_buffer has been padded with \0's */

memset(block_buffer, '\0', blocksize);

IV = malloc(mcrypt_enc_get_iv_size(td));

if ((block_buffer == NULL) || (IV == NULL)) {

fprintf(stderr, "Failed to allocate memory\n");

exit(EXIT_FAILURE);

}

for (i = 0; i

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值