OpenSSL命令行输入数据长度

时间:2018-03-21 13:46:24

标签: openssl aes

使用OpenSSL CLI,我收到一个16字节输入字符串的错误

echo -e "abcdefgh\x08\x08\x08\x08\x08\x08\x08\x08" | openssl enc -aes-256-cbc -nopad -a -K 6162636465666768696A6B6C6D6E6F707172737475767778797A303132333435 -iv 61636567696B6D6F7173757779303234

说明

  解密不好   140550741059328:错误:0607F08A:数字包络例程:EVP_EncryptFinal_ex:数据不是块长度的倍数:crypto / evp / evp_enc.c:437

但如果我将输入字符串长度更改为15个字节abcdefgh\x08\x08\x08\x08\x08\x08\x08,则不会发生错误。它发生在13,14,16和17字节输入中。没试过其他长度。

鉴于AES 256 CBC的块长度为16字节,我看不出我做错了什么。

1 个答案:

答案 0 :(得分:1)

echo在字符串后面添加一个回车符,使数据加密17个字节而不是16个字节。

所以openssl错误是正确的:import { Component, Input, EventEmitter, Output } from '@angular/core'; @Component({ selector: 'Menu', template: ` <div> test <button (click)="toggler()">MENU</button> <div id="left-menu" [hidden]="hidden"> <ul> <li *ngFor="let item of items"><a (click)="displayMarkers(item.action)">{{ item.text }}</a></li> </ul> </div> </div>` }) export class Menu { @Output() pick = new EventEmitter<any>(); hidden: boolean = true; items: object[] = [ {action: 'login', text: 'zaloguj się'}, {action: 'halls', text: 'hale sportowe'}, {action: 'sweemingPools', text: 'baseny'}, ]; constructor() {} toggler() { this.hidden = !this.hidden; }; displayMarkers(type:string){ console.log('test1', type); //work correctly this.pick.emit(type); //won't work }; }

您应该使用data not multiple of block length的{​​{1}}选项:

-n