新的OpenSSL,任何人可以给我一个提示如何从C文件初始化AES CTR模式.我知道这是方法的签名,但我有参数的问题,没有很多文档没有一个明确的例子如何进行简单的加密.如果有人可以举例说明这种方法的话,我将不胜感激.提前致谢!

void AES_ctr128_encrypt(const unsigned char *in, unsigned char *out,

const unsigned long length, const AES_KEY *key,

unsigned char ivec[AES_BLOCK_SIZE],

unsigned char ecount_buf[AES_BLOCK_SIZE],

unsigned int *num);

嗨,我非常感谢你的快速回答,这是非常有用的,而且是我在网络上找到的最好的例子.我试图打开一个长度不确定的文件,对它进行加密并写入另一个生成密文的文件,然后打开加密文件并恢复明文.我需要使用相当数量的MB的文件,因为我想对CPU的性能进行基准测试.然而,我在解密时仍然有问题.解密一个相当大的txt文件(1504KB)不知何故,它不会解密它完成,我得到一半的明文,另一半仍然加密.我认为这可能与iv的大小或我打电话的方式有关.这是我到目前为止

#include

#include

#include

struct ctr_state {

unsigned char ivec[16];

unsigned int num;

unsigned char ecount[16];

};

FILE *fp;

FILE *rp;

FILE *op;

size_t count;

char * buffer;

AES_KEY key;

int bytes_read, bytes_written;

unsigned char indata[AES_BLOCK_SIZE];

unsigned char outdata[AES_BLOCK_SIZE];

unsigned char ckey[] = "thiskeyisverybad"; // It is 128bits though..

unsigned char iv[8] = {0};//This should be generated by RAND_Bytes I will take into consideration your previous post

struct ctr_state state;

int init_ctr(struct ctr_state *state, const unsigned char iv[8]){

state->num = 0;

memset(state->ecount, 0, 16);

memset(state->ivec + 8, 0, 8);

memcpy(state->ivec, iv, 8);

}

void encrypt(){

//Opening files where text plain text is read and ciphertext stored

fp=fopen("input.txt","a+b");

op=fopen("output.txt","w");

if (fp==NULL) {fputs ("File error",stderr); exit (1);}

if (op==NULL) {fputs ("File error",stderr); exit (1);}

//Initializing the encryption KEY

AES_set_encrypt_key(ckey, 128, &key);

//Encrypting Blocks of 16 bytes and writing the output.txt with ciphertext

while (1) {

init_ctr(&state, iv); //Counter call

bytes_read = fread(indata, 1, AES_BLOCK_SIZE, fp);

AES_ctr128_encrypt(indata, outdata, bytes_read, &key, state.ivec, state.ecount, &state.num);

bytes_written = fwrite(outdata, 1, bytes_read, op);

if (bytes_read < AES_BLOCK_SIZE)

break;

}

fclose (fp);

fclose (op);

free (buffer);

}

void decrypt(){

//Opening files where text cipher text is read and the plaintext recovered

rp=fopen("recovered.txt","w");

op=fopen("output.txt","a+b");

if (rp==NULL) {fputs ("File error",stderr); exit (1);}

if (op==NULL) {fputs ("File error",stderr); exit (1);}

//Initializing the encryption KEY

AES_set_encrypt_key(ckey, 128, &key);

//Encrypting Blocks of 16 bytes and writing the output.txt with ciphertext

while (1) {

init_ctr(&state, iv);//Counter call

bytes_read = fread(indata, 1, AES_BLOCK_SIZE, op);

AES_ctr128_encrypt(indata, outdata, bytes_read, &key, state.ivec, state.ecount, &state.num);

bytes_written = fwrite(outdata, 1, bytes_read, rp);

if (bytes_read < AES_BLOCK_SIZE)

break;

}

fclose (rp);

fclose (op);

free (buffer);

}

int main(int argc, char *argv[]){

encrypt();

//decrypt();

system("PAUSE");

return 0;

}

每个加密和解密功能在不同的运行中被调用,所以所有的东西总是以相同的值初始化.再次感谢您提前提供的提示和提示.问候!!!

java aes 256 ctr,AES CTR 256 OpenSSL上的加密操作模式相关推荐

  1. java aes ctr_AES CBC和CTR加解密实例

    http://www.metsky.com/archives/585.html 2012 AES(Advanced Encryption Standard,高级加密标准) 又叫Rijndael加密法, ...

  2. Delphi与JAVA互加解密AES算法

    搞了半天终于把这个对应的参数搞上了,话不多说,先干上代码: package com.bss.util;import java.io.UnsupportedEncodingException; impo ...

  3. Java实现对称加密算法-AES加解密

    AES(Advanced Encryption Standard)意思是高级加密标准,是一种区块加密标准.这个标准用来替代原先的DES,且已经被广泛使用. DES使用56位密钥,所以比较容易被破解. ...

  4. Java 环境下使用 AES 加密的特殊问题处理

    1. 密钥长度问题 默认 Java 中仅支持 128 位密钥,当使用 256 位密钥的时候,会报告密钥长度错误 Invalid AES key length 你需要下载一个支持更长密钥的包.这个包叫做 ...

  5. java aes 中文_从Java到Python的AES加密

    我试图对python和java中的一些字符串进行加密和解密,反之亦然,但是当我尝试用java加密和在python中使用相同的密钥解密时,我遇到了问题.在 这是我用来解密java输出的python算法f ...

  6. java双端加密操作 vue+springboot+AES(CBC-ECB) ------------------前传后

    一.前端vue 控制台先加载AES    npm install crypto-js --save-dev  编写AES-CBC加密解密方法 import CryptoJS from "cr ...

  7. Vue前端和Java后端 联调使用AES 前后端加密解密

    Vue前端和Java后端 联调使用AES 前后端加密解密 最近在项目中需要针对重要数据进行加密传输,在网上找了一大推加密方式 最终采用AES 加密 Java端 package com.zk.web.u ...

  8. java中的DES,AES,BASE64,MD5和Cipher类\MessageDigest类

    Cipher类位于javax.crypto包下,声明为 public class Cipher extends Object 此类为加密和解密提供密码功能.它构成了 Java Cryptographi ...

  9. java ctr_分组密码_计数器(CTR)模式_原理及java实现

    一.原理: CTR模式是一种通过将逐次累加的计数器进行加密来生成密钥流的流密码,在CTR模式中,每个分组对应一个逐次累加的计数器,并通过对计数器进行加密来生成密钥流.最终的密文分组是通过将计数器加密得 ...

最新文章

  1. python国防_Python+Excel数据分析实战:军事体能考核成绩评定(二)基本框架和年龄计算...
  2. golang web 静态文件
  3. 只会python好找工作吗-转行去培训班学Python好找工作吗?老男孩教育
  4. IOS学习笔记 O2
  5. Ansj中文分词Java开发小记
  6. jdbc连接数据库失败,com.microsoft.sqlserver.jdbc.SQLServerException: 到主机 的 TCP/IP 连接失败。
  7. 解除Ubuntu系统的root登录图形界面限制
  8. Maximum Xor Secondary(单调栈好题)
  9. Android粒子爆炸特效[可用于任意控件]
  10. docker 部署rabbitmq,k8s部署rabbitmq集群,跟踪和监控rabbitmq
  11. 程序员面试金典——番外篇之下一个较大元素II
  12. 不高兴INTEL挤牙膏,技术天才Jim Keller愤而辞职
  13. php多个 运算_php计算多个集合的笛卡尔积实例详解
  14. [轉]快速理解VirtualBox的四种网络连接方式
  15. 带温度补偿RTC芯片的选型和应用
  16. win10设置linux虚拟网卡,win10系统安装虚拟网卡的详细步骤
  17. BZOJ4556 HEOI2016 字符串
  18. 移动宽带套餐介绍_中国移动宽带最新套餐介绍
  19. express+socket.io 共享session
  20. 去你的35岁危机|ONES 人物

热门文章

  1. ElasticSearch第一讲 Docker-compose 单机部署Elasticsearch kibana esHead与配置认证证书设置密码
  2. Ubuntu16.04 + Cuda-9.0 + Cudnn-7.1.4 + TensorFlow1.8(极其简单)
  3. 芯盾时代人工智能全渠道业务安全防护方案:提供“业务+平台+建模服务”为核心的多场景反欺诈服务| 百万人学AI评选
  4. Graphviz绘制链表
  5. 用java写出杨辉三角。
  6. python nonetype_理解Python中的NoneType对象
  7. android 三大框架是什么,聊聊Android中的三大框架
  8. 为什么pLC工程师如此年轻,他们的经验毫无价值?
  9. redis requires ruby version 2.2.2的解决方案
  10. 时序预测 | MATLAB实现BiLSTM时间序列预测