FLUTTER /encrypt 在加密没有填充的 16o 字符串时得到 32o 字符串
FLUTTER /encrypt getting 32o string when encrypting 16o String with NO PADDING
我的 AES128-cbc 有问题,没有填充,当我给它一个 16o 的字符串时,它给我一个 32o 的字符串(我没有填充)
你能帮我理解这是怎么回事吗?
非常感谢^^
PS:我使用加密库:https://pub.dev/packages/encrypt
这是我的加密器的一部分class
class AESEncryptor{
var iv;
var encrypter;
var key;
AESEncryptor(){
this.key = Key.fromSecureRandom(16);
this.iv = IV.fromLength(16);
this.encrypter = Encrypter(AES(key, mode: AESMode.cbc, padding: null));
}
void setIV(iv){
this.iv=iv;
}
IV getIv(){
return(this.iv);
}
void setKey(key){
this.key=key;
}
Key getKey(){
return(this.key);
}
dynamic encrypt(data){
if (data.runtimeType==Key){
data=data.base16;
}
return encrypter.encrypt(data, iv: this.iv);
}
}
多亏了 Topaco,我找到了纠正它的方法
新密码
dynamic encrypt(data){
if (data.runtimeType==Key){
data=toInt(combineByTwo(data.base16.split('')));
}
return encrypter.encryptBytes(data, iv: this.iv);
}
我使用的两个(暂时不完整的)函数:
List<int> toInt(chaine){
List<int> tab=[];
for (var i=0;i<chaine.length;i++){
tab.add(int.parse(chaine[i],radix:16));
}
return tab;
}
List combineByTwo(list){
List tab=[];
for (var i=0;i<list.length;i+=2){
tab.add(list[i]+list[i+1]);
}
return tab;
}
我的 AES128-cbc 有问题,没有填充,当我给它一个 16o 的字符串时,它给我一个 32o 的字符串(我没有填充)
你能帮我理解这是怎么回事吗? 非常感谢^^
PS:我使用加密库:https://pub.dev/packages/encrypt
这是我的加密器的一部分class
class AESEncryptor{
var iv;
var encrypter;
var key;
AESEncryptor(){
this.key = Key.fromSecureRandom(16);
this.iv = IV.fromLength(16);
this.encrypter = Encrypter(AES(key, mode: AESMode.cbc, padding: null));
}
void setIV(iv){
this.iv=iv;
}
IV getIv(){
return(this.iv);
}
void setKey(key){
this.key=key;
}
Key getKey(){
return(this.key);
}
dynamic encrypt(data){
if (data.runtimeType==Key){
data=data.base16;
}
return encrypter.encrypt(data, iv: this.iv);
}
}
多亏了 Topaco,我找到了纠正它的方法
新密码
dynamic encrypt(data){
if (data.runtimeType==Key){
data=toInt(combineByTwo(data.base16.split('')));
}
return encrypter.encryptBytes(data, iv: this.iv);
}
我使用的两个(暂时不完整的)函数:
List<int> toInt(chaine){
List<int> tab=[];
for (var i=0;i<chaine.length;i++){
tab.add(int.parse(chaine[i],radix:16));
}
return tab;
}
List combineByTwo(list){
List tab=[];
for (var i=0;i<list.length;i+=2){
tab.add(list[i]+list[i+1]);
}
return tab;
}