使用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字节,我看不出我做错了什么。
答案 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