Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A macOS-en és Linuxon futó .NET Core 2.0-ban az implementáció helytelenül csomagolta be a EnvelopedCms tartalmat egy további ASN.1 OCTET STRING értékben. Az ezzel a hibával létrehozott tartalom feldolgozásakor a kompatibilitás fenntartása érdekében az EnvelopedCms osztály továbbra is megvizsgálta a visszafejtett tartalmat, és megpróbálta eltávolítani a további adatokat. EnvelopedCms külső titkos kulcs használata esetén eltávolította a felesleges adatokat a Windowsról, és az összes többi operációs rendszerről a visszafejtéshez.
Ez az opportunista kompatibilitási kód sajnos nem tud különbséget tenni a helytelenül létrehozott dokumentumok és a helyesen létrehozott, de azonos adatalakzatú dokumentumok között.
Előző viselkedés
Korábban, ha a visszafejtett tartalom a bájtértékkel 0x04 és egy jogilag kódolt ASN.1 BER hosszértékkel indult, amely kisebb vagy egyenlő volt a tartalomban maradt bájtok számával, a tulajdonságban envelopedCms.ContentInfo.Content megadott adatok csak az érték tartalom-oktett-részéhez kapcsolódó adatokat fogadták, amikor ASN.1 OCTET-SZTRINGként kezelik.
Ha például az eredetileg visszafejtett tartalom a bájtsor { 0x04, 0x03, 0x01, 0x02, 0x03 } vagy { 0x04, 0x03, 0x01, 0x02, 0x03, [continued content] } volt, akkor a envelopedCms.ContentInfo.Content értéke a bájtsor { 0x01, 0x02, 0x03 } volt.
Azok az értékek, amelyek nem 0x04-val kezdődtek, vagy 0x04-vel kezdődtek, de nem követte őket elfogadhatóan kódolt hosszérték, teljes körűen jelentve lettek.
Bizonyos túlterhelések EnvelopedCms.Decryptesetén ez a viselkedés csak nem Windows operációs rendszereken fordult elő. További információ: Érintett API-k.
Új viselkedés
Az EnvelopedCms osztály már nem próbálja megkerülni az előző problémát, és mindig hűségesen jelenti a visszafejtött tartalmat.
Ha macOS vagy Linux rendszeren az osztály .NET Core 2.0-s verziójával EnvelopedCms létrehozott dokumentumokat dolgoz fel, a tartalom elején további adatok fognak megjelenni.
Bevezetett verzió
.NET 7
A kompatibilitástörő változás típusa
Ez a változás befolyásolhatja a bináris kompatibilitást.
A változás oka
A kompatibilitási kód nem tudott különbséget tenni a helytelenül létrehozott dokumentumok és a ber kódolású ASN.1 OKTET-sztringhez hasonló adatokat jogszerűen szállító dokumentumok között.
A BER kódolás jellege miatt a kompatibilitási kód által negatívan érintett hívók nem tudták könnyen helyreállítani a hiányzó adatokat.
Javasolt művelet
A .NET Core 2.0-n macOS vagy Linux rendszeren létrehozott EnvelopedCms dokumentumokat olvasó hívók kódot adhatnak a további adatok eltávolításához. Az eltávolításához használja a AsnDecoder osztályt a System.Formats.Asn1 NuGet csomagból, amely már az EnvelopedCms osztály függősége.
envelopedCms.Decrypt(...);
byte[] content = envelopedCms.ContentInfo.Content;
if (envelopedCms.ContentInfo.Oid.Value == "1.2.840.113549.1.7.1")
{
if (content?.Length > 0 && content[0] == 0x04)
{
try
{
content = AsnDecoder.ReadOctetString(content, AsnEncodingRules.BER, out _);
}
catch (AsnContentException)
{
}
}
}
Érintett API-k
- System.Security.Cryptography.Pkcs.EnvelopedCms.Decrypt(RecipientInfo, AsymmetricAlgorithm)
- System.Security.Cryptography.Pkcs.EnvelopedCms.Decrypt(RecipientInfo, X509Certificate2Collection) (csak Windows rendszeren kívüli)
- System.Security.Cryptography.Pkcs.EnvelopedCms.Decrypt(RecipientInfo) (csak Windows rendszeren kívüli)
- System.Security.Cryptography.Pkcs.EnvelopedCms.Decrypt(X509Certificate2Collection) (csak Windows rendszeren kívüli)