请帮我解决这个问题。填充无效,无法删除 [英] Please help me to solve this problem. Padding is invalid and cannot be removed

查看:50
本文介绍了请帮我解决这个问题。填充无效,无法删除的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 使用系统; 
使用 System.Collections.Generic;
使用 System.Linq;
使用 System.Web;
使用 System.Web.UI;
使用 System.Web.UI.WebControls;
使用 System.Security.Cryptography;
使用 System.Text;

public partial class 关于:System.Web.UI.Page
{
string cipherData;
byte [] cipherByte;
byte [] textByte1;
byte [] textByte2;
byte []键;

SymmetricAlgorithm desObj;

受保护 void Page_Load( object sender,EventArgs e)
{
desObj = Rijndael.Create();
}

受保护 void btnEncryption_Click( object sender,EventArgs e)
{
cipherData = txtST.Text;
textByte1 = Encoding.ASCII.GetBytes(cipherData);
key = Encoding.ASCII.GetBytes( 0123456789abcdef);
desObj.Key = key;

desObj.Mode = CipherMode.CBC;
desObj.Padding = PaddingMode.PKCS7;
System.IO.MemoryStream ms = new System.IO.MemoryStream();
CryptoStream cs = new CryptoStream(ms,desObj.CreateEncryptor(),CryptoStreamMode.Write);
cs.Write(textByte1, 0 ,textByte1.Length);
cs.Close();
cipherByte = ms.ToArray();
ms.Close();
txtEnc.Text = Encoding.ASCII.GetString(cipherByte);
string data = txtEnc.Text;
会话[ encryptData] = data;
}

受保护 void btnDecryption_Click( object <> span sender,EventArgs e)
{

byte [] takeData = Encoding.Default .GetBytes(( string )会话[ encryptData< /跨度>]);
System.IO.MemoryStream ms1 = new System.IO.MemoryStream(takeData);
CryptoStream cs1 = new CryptoStream(ms1,desObj.CreateDecryptor(),CryptoStreamMode.Read);

cs1.Read(takeData, 0 ,takeData.Length);
textByte2 = ms1.ToArray();
cs1.Close();
ms1.Close();

txtDec.Text = Encoding.ASCII.GetString(textByte2);

}
}

解决方案

世界上有什么让你认为八位的ASCII编码位二进制数据只是有效的文本,你可以反转并从中获取原始输入?

一个简单的测试就证明它不会起作用:

  byte  [] inp =  new   byte  [ 256 ]; 
for int i = 0 ; i < 256 ; i ++)
{
inp [i ] =( byte )i;
}
string s = Encoding.ASCII.GetString(inp);
byte [] outp = Encoding.Default.GetBytes(s);
if (inp.Length!= outp.Length)Console.WriteLine( 长度不同:{0}:{1},inp.Length,outp.Length);
for int i = 0 ; i < (Math.Min(inp.Length,outp.Length)); i ++)
{
if (inp [i]!= outp [i])Console.WriteLine( Diff [{0}]:{1}!= {2},i,inp [i],outp [i]);
}



结果:

 Diff [128]:128!= 63 
Diff [129]:129!= 63
Diff [130]:130!= 63
Diff [131]:131!= 63
Diff [132]:132!= 63
Diff [133]:133!= 63
Diff [134]:134!= 63
Diff [135]:135!= 63
Diff [136]:136!= 63
差异[137]:137!= 63
差异[138]:138!= 63
差异[139]:139!= 63
差异[140]:140 != 63
差异[141]:141!= 63
差异[142]:142!= 63
差异[143]:143!= 63
差异[144] :144!= 63
差异[145]:145!= 63
差异[146]:146!= 63
差异[147]:147!= 63
差异[ 148]:148!= 63
差异[149]:149!= 63
差异[150]:150!= 63
差异[151]:151!= 63
Diff [152]:152!= 63
Diff [153]:153!= 63
Diff [154]:154!= 63
Diff [155]:155!= 63
Diff [156]:156!= 63
Diff [157]:157!= 63
Diff [158]:158!= 63
Diff [159]:159!= 63
Diff [160]:160!= 63
差异[161] :161!= 63
Diff [162]:162!= 63
Diff [163]:163!= 63
Diff [164]:164!= 63
Diff [ 165]:165!= 63
差异[166]:166!= 63
差异[167]:167!= 63
差异[168]:168!= 63
Diff [169]:169!= 63
Diff [170]:170!= 63
Diff [171]:171!= 63
Diff [172]:172!= 63
Diff [173]:173!= 63
Diff [174]:174!= 63
Diff [175]:175!= 63
Diff [176]:176!= 63
差异[177]:177!= 63
差异[178]:178!= 63
差异[179]:179!= 63
差异[180]:180! = 63
差异[181]:181!= 63
差异[182]:182!= 63
差异[183]​​:183!= 63
差异[184]: 184!= 63
差异[185]:185!= 63
差异[186]:186!= 63
差异[187]:187!= 63
差异[188 ]:188!= 63
差异[189]:189!= 63
差异[190]:190!= 63
差异[191]:191!= 63
差异[192]:192!= 63
差异[193]:193!= 63
差异[194]:194!= 63
差异[195]:195!= 63
Diff [196]:196!= 63
Di ff [197]:197!= 63
Diff [198]:198!= 63
Diff [199]:199!= 63
Diff [200]:200!= 63
Diff [201]:201!= 63
Diff [202]:202!= 63
Diff [203]:203!= 63
Diff [204]:204!= 63
差异[205]:205!= 63
差异[206]:206!= 63
差异[207]:207!= 63
差异[208]:208! = 63
差异[209]:209!= 63
差异[210]:210!= 63
差异[211]:211!= 63
差异[212]: 212!= 63
Diff [213]:213!= 63
Diff [214]:214!= 63
Diff [215]:215!= 63
Diff [216 ]:216!= 63
Diff [217]:217!= 63
Diff [218]:218!= 63
Diff [219]:219!= 63
Diff [220]:220!= 63
Diff [221]:221!= 63
Diff [222]:222!= 63
Diff [223]:223!= 63
Diff [224]:224!= 63
Diff [225]:225!= 63
Diff [226]:226!= 63
Diff [227]:227!= 63
Diff [228]:228!= 63
Diff [229]:229!= 63
Diff [230]:230!= 63
Diff [231]:231!= 63
Diff [232]:232!= 63
Diff [233]:233!= 63
Diff [234]:234!= 63
Diff [235]:235!= 63
Diff [236]:236! = 63
差异[237]:237!= 63
差异[238]:238!= 63
差异[239]:239!= 63
差异[240]: 240!= 63
Diff [241]:241!= 63
Diff [242]:242!= 63
Diff [243]:243!= 63
Diff [244 ]:244!= 63
差异[245]:245!= 63
差异[246]:246!= 63
差异[247]:247!= 63
差异[248]:248!= 63
Diff [249]:249!= 63
Diff [250]:250!= 63
Diff [251]:251!= 63
Diff [252]:252!= 63
Diff [253]:253!= 63
Diff [254]:254!= 63
Diff [255]:255!= 63


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Security.Cryptography;
using System.Text;

public partial class About : System.Web.UI.Page
{
    string cipherData;
    byte[] cipherByte;
    byte[] textByte1;
    byte[] textByte2;
    byte[] key;
    
    SymmetricAlgorithm desObj;

    protected void Page_Load(object sender, EventArgs e)
    {
        desObj = Rijndael.Create();
    }

    protected void btnEncryption_Click(object sender, EventArgs e)
    {
        cipherData = txtST.Text;
        textByte1 = Encoding.ASCII.GetBytes(cipherData);
        key = Encoding.ASCII.GetBytes("0123456789abcdef");
        desObj.Key = key;

        desObj.Mode = CipherMode.CBC;
        desObj.Padding = PaddingMode.PKCS7;
        System.IO.MemoryStream ms = new System.IO.MemoryStream();
        CryptoStream cs = new CryptoStream(ms, desObj.CreateEncryptor(), CryptoStreamMode.Write);
        cs.Write(textByte1, 0, textByte1.Length);
        cs.Close();
        cipherByte = ms.ToArray();
        ms.Close();
        txtEnc.Text = Encoding.ASCII.GetString(cipherByte);
        string data = txtEnc.Text;
        Session["encryptData"] = data;
    }

    protected void btnDecryption_Click(object sender, EventArgs e)
    {
        
        byte[] takeData =  Encoding.Default.GetBytes((string)Session["encryptData"]);
        System.IO.MemoryStream ms1 = new System.IO.MemoryStream(takeData);
        CryptoStream cs1 = new CryptoStream(ms1, desObj.CreateDecryptor(), CryptoStreamMode.Read);

        cs1.Read(takeData, 0, takeData.Length);
        textByte2 = ms1.ToArray();
        cs1.Close();
        ms1.Close();

        txtDec.Text = Encoding.ASCII.GetString(textByte2);

    }
}

解决方案

What in world makes you think that the ASCII encoding of eight bit binary data will be just valid text you can reverse and get your original input from?
A simple test would have proved it wont work:

byte[] inp = new byte[256];
for (int i = 0; i < 256; i++)
    {
    inp[i] = (byte)i;
    }
string s = Encoding.ASCII.GetString(inp);
byte[] outp = Encoding.Default.GetBytes(s);
if (inp.Length != outp.Length) Console.WriteLine("Different length: {0}:{1}", inp.Length, outp.Length);
for (int i = 0; i < (Math.Min(inp.Length, outp.Length)); i++)
    {
    if (inp[i] != outp[i]) Console.WriteLine("   Diff [{0}] : {1} != {2}", i, inp[i], outp[i]);
    }


Results:

Diff [128] : 128 != 63
Diff [129] : 129 != 63
Diff [130] : 130 != 63
Diff [131] : 131 != 63
Diff [132] : 132 != 63
Diff [133] : 133 != 63
Diff [134] : 134 != 63
Diff [135] : 135 != 63
Diff [136] : 136 != 63
Diff [137] : 137 != 63
Diff [138] : 138 != 63
Diff [139] : 139 != 63
Diff [140] : 140 != 63
Diff [141] : 141 != 63
Diff [142] : 142 != 63
Diff [143] : 143 != 63
Diff [144] : 144 != 63
Diff [145] : 145 != 63
Diff [146] : 146 != 63
Diff [147] : 147 != 63
Diff [148] : 148 != 63
Diff [149] : 149 != 63
Diff [150] : 150 != 63
Diff [151] : 151 != 63
Diff [152] : 152 != 63
Diff [153] : 153 != 63
Diff [154] : 154 != 63
Diff [155] : 155 != 63
Diff [156] : 156 != 63
Diff [157] : 157 != 63
Diff [158] : 158 != 63
Diff [159] : 159 != 63
Diff [160] : 160 != 63
Diff [161] : 161 != 63
Diff [162] : 162 != 63
Diff [163] : 163 != 63
Diff [164] : 164 != 63
Diff [165] : 165 != 63
Diff [166] : 166 != 63
Diff [167] : 167 != 63
Diff [168] : 168 != 63
Diff [169] : 169 != 63
Diff [170] : 170 != 63
Diff [171] : 171 != 63
Diff [172] : 172 != 63
Diff [173] : 173 != 63
Diff [174] : 174 != 63
Diff [175] : 175 != 63
Diff [176] : 176 != 63
Diff [177] : 177 != 63
Diff [178] : 178 != 63
Diff [179] : 179 != 63
Diff [180] : 180 != 63
Diff [181] : 181 != 63
Diff [182] : 182 != 63
Diff [183] : 183 != 63
Diff [184] : 184 != 63
Diff [185] : 185 != 63
Diff [186] : 186 != 63
Diff [187] : 187 != 63
Diff [188] : 188 != 63
Diff [189] : 189 != 63
Diff [190] : 190 != 63
Diff [191] : 191 != 63
Diff [192] : 192 != 63
Diff [193] : 193 != 63
Diff [194] : 194 != 63
Diff [195] : 195 != 63
Diff [196] : 196 != 63
Diff [197] : 197 != 63
Diff [198] : 198 != 63
Diff [199] : 199 != 63
Diff [200] : 200 != 63
Diff [201] : 201 != 63
Diff [202] : 202 != 63
Diff [203] : 203 != 63
Diff [204] : 204 != 63
Diff [205] : 205 != 63
Diff [206] : 206 != 63
Diff [207] : 207 != 63
Diff [208] : 208 != 63
Diff [209] : 209 != 63
Diff [210] : 210 != 63
Diff [211] : 211 != 63
Diff [212] : 212 != 63
Diff [213] : 213 != 63
Diff [214] : 214 != 63
Diff [215] : 215 != 63
Diff [216] : 216 != 63
Diff [217] : 217 != 63
Diff [218] : 218 != 63
Diff [219] : 219 != 63
Diff [220] : 220 != 63
Diff [221] : 221 != 63
Diff [222] : 222 != 63
Diff [223] : 223 != 63
Diff [224] : 224 != 63
Diff [225] : 225 != 63
Diff [226] : 226 != 63
Diff [227] : 227 != 63
Diff [228] : 228 != 63
Diff [229] : 229 != 63
Diff [230] : 230 != 63
Diff [231] : 231 != 63
Diff [232] : 232 != 63
Diff [233] : 233 != 63
Diff [234] : 234 != 63
Diff [235] : 235 != 63
Diff [236] : 236 != 63
Diff [237] : 237 != 63
Diff [238] : 238 != 63
Diff [239] : 239 != 63
Diff [240] : 240 != 63
Diff [241] : 241 != 63
Diff [242] : 242 != 63
Diff [243] : 243 != 63
Diff [244] : 244 != 63
Diff [245] : 245 != 63
Diff [246] : 246 != 63
Diff [247] : 247 != 63
Diff [248] : 248 != 63
Diff [249] : 249 != 63
Diff [250] : 250 != 63
Diff [251] : 251 != 63
Diff [252] : 252 != 63
Diff [253] : 253 != 63
Diff [254] : 254 != 63
Diff [255] : 255 != 63


这篇关于请帮我解决这个问题。填充无效,无法删除的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆