DSA DSA DSA DSA Class

Definice

Představuje abstraktní základní třídu, ze které musí dědit všechny implementace algoritmu digitálního podpisuDSA().Represents the abstract base class from which all implementations of the Digital Signature Algorithm (DSA) must inherit.

public ref class DSA abstract : System::Security::Cryptography::AsymmetricAlgorithm
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class DSA : System.Security.Cryptography.AsymmetricAlgorithm
type DSA = class
    inherit AsymmetricAlgorithm
Public MustInherit Class DSA
Inherits AsymmetricAlgorithm
Dědičnost
Odvozené
Atributy

Poznámky

DSA Třídu a odvozené třídy můžete použít k vytvoření digitálních podpisů, které vám pomohou chránit integritu dat.You can use the DSA class and derived classes to create digital signatures that help protect the integrity of your data. DSACryptoServiceProvider Poskytuje implementaci této třídy.The DSACryptoServiceProvider provides an implementation of this class.

Chcete-li použít systém veřejného klíče k digitálnímu podpisu zprávy, odesílatel nejprve použije funkci hash na zprávu k vytvoření výtahu zprávy.To use a public-key system to digitally sign a message, the sender first applies a hash function to the message to create a message digest. Odesílatel pak zašifruje výtah zprávy pomocí privátního klíče odesílatele a vytvoří osobní podpis odesilatele.The sender then encrypts the message digest with the sender's private key to create the sender's personal signature. Po přijetí zprávy a podpisu příjemce dešifruje podpis pomocí veřejného klíče odesílatele, aby obnovil výtah zprávy a hodnotu hash zprávy pomocí stejného algoritmu hash, který odesílatel použil.Upon receiving the message and signature, the receiver decrypts the signature using the sender's public key to recover the message digest and hashes the message using the same hash algorithm that the sender used. Pokud se výtah zprávy, který příjemce počítá, přesně shoduje se výtahem zprávy přijatým od odesílatele, příjemce může předpokládat, že se zpráva během přenosu nezměnila.If the message digest that the receiver computes exactly matches the message digest received from the sender, the receiver can assume that the message was not altered while in transit. Všimněte si, že podpis může ověřit kdokoli, protože veřejný klíč odesílatele je běžným vědomím.Note that a signature can be verified by anyone, because the sender's public key is common knowledge.

Důležité

K dispozici jsou novější asymetrické algoritmy.Newer asymmetric algorithms are available. Zvažte použití RSA třídy ECDsa nebo třídy namísto DSA třídy.Consider using the RSA class or the ECDsa class instead of the DSA class. Používejte DSA jenom pro kompatibilitu se staršími aplikacemi a daty.Use DSA only for compatibility with legacy applications and data.

Existují dvě různé verze algoritmu DSA.Two different versions of the DSA algorithm exist. Původní forma popsaná v FIPS 186-2 vyžaduje použití SHA-1 jako algoritmu hash a podporuje délky klíčů od 512 bitů do 1024 bitů v přírůstcích po 64 bitech.The original form, described in FIPS 186-2, requires the use of SHA-1 as the hash algorithm and supports key lengths from 512 bits to 1024 bits in increments of 64 bits. Aktualizovaná verze algoritmu byla popsána v FIPS 186-3, která povoluje použití algoritmu hash SHA-2 a přidání podpory pro 2048 bitové klíče a 3072 bitových klíčů.An updated version of the algorithm was described in FIPS 186-3, which enabled the use of the SHA-2 family of hash algorithms and added support for 2048 bit keys and 3072 bit keys. Ne všechny odvozené implementace tohoto typu podporují vylepšení standardu FIPS 186-3 na DSA.Not all derived implementations of this type support the FIPS 186-3 enhancements to DSA. Podporu lze zjistit prostřednictvím LegalKeySizes vlastnosti.Support can be detected via the LegalKeySizes property.

Konstruktory

DSA() DSA() DSA() DSA()

Inicializuje novou instanci třídy DSA třídy.Initializes a new instance of the DSA class.

Metody

Clear() Clear() Clear() Clear()

Uvolní všechny prostředky používané AsymmetricAlgorithm třídou.Releases all resources used by the AsymmetricAlgorithm class.

(Inherited from AsymmetricAlgorithm)
Create() Create() Create() Create()

Vytvoří výchozí kryptografický objekt použitý k provedení asymetrického algoritmu.Creates the default cryptographic object used to perform the asymmetric algorithm.

Create(DSAParameters) Create(DSAParameters) Create(DSAParameters) Create(DSAParameters)

Vytvoří nový dočasný klíč DSA se zadanými parametry klíče DSA.Creates a new ephemeral DSA key with the specified DSA key parameters.

Create(Int32) Create(Int32) Create(Int32) Create(Int32)

Vytvoří nový dočasný klíč DSA se zadanou velikostí klíče.Creates a new ephemeral DSA key with the specified key size.

Create(String) Create(String) Create(String) Create(String)

Vytvoří zadaný kryptografický objekt použitý k provedení asymetrického algoritmu.Creates the specified cryptographic object used to perform the asymmetric algorithm.

CreateSignature(Byte[]) CreateSignature(Byte[]) CreateSignature(Byte[]) CreateSignature(Byte[])

Při přepsání v odvozené třídě vytvoří DSA podpis pro zadaná data.When overridden in a derived class, creates the DSA signature for the specified data.

Dispose() Dispose() Dispose() Dispose()

Uvolní všechny prostředky používané aktuální instancí AsymmetricAlgorithm třídy.Releases all resources used by the current instance of the AsymmetricAlgorithm class.

(Inherited from AsymmetricAlgorithm)
Dispose(Boolean) Dispose(Boolean) Dispose(Boolean) Dispose(Boolean)

Uvolní nespravované prostředky používané AsymmetricAlgorithm třídou a volitelně uvolňuje spravované prostředky.Releases the unmanaged resources used by the AsymmetricAlgorithm class and optionally releases the managed resources.

(Inherited from AsymmetricAlgorithm)
Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Určuje, zda se zadaný objekt rovná aktuálnímu objektu.Determines whether the specified object is equal to the current object.

(Inherited from Object)
ExportEncryptedPkcs8PrivateKey(ReadOnlySpan<Byte>, PbeParameters) ExportEncryptedPkcs8PrivateKey(ReadOnlySpan<Byte>, PbeParameters) ExportEncryptedPkcs8PrivateKey(ReadOnlySpan<Byte>, PbeParameters) ExportEncryptedPkcs8PrivateKey(ReadOnlySpan<Byte>, PbeParameters)

Exportuje aktuální klíč ve formátu PKCS # 8 EncryptedPrivateKeyInfo s heslem založeným na bajtech.Exports the current key in the PKCS#8 EncryptedPrivateKeyInfo format with a byte-based password.

(Inherited from AsymmetricAlgorithm)
ExportEncryptedPkcs8PrivateKey(ReadOnlySpan<Char>, PbeParameters) ExportEncryptedPkcs8PrivateKey(ReadOnlySpan<Char>, PbeParameters) ExportEncryptedPkcs8PrivateKey(ReadOnlySpan<Char>, PbeParameters) ExportEncryptedPkcs8PrivateKey(ReadOnlySpan<Char>, PbeParameters)

Exportuje aktuální klíč ve formátu PKCS # 8 EncryptedPrivateKeyInfo pomocí hesla založeného na typu char.Exports the current key in the PKCS#8 EncryptedPrivateKeyInfo format with a char-based password.

(Inherited from AsymmetricAlgorithm)
ExportParameters(Boolean) ExportParameters(Boolean) ExportParameters(Boolean) ExportParameters(Boolean)

Při přepsání v odvozené třídě exportuje DSAParameters.When overridden in a derived class, exports the DSAParameters.

ExportPkcs8PrivateKey() ExportPkcs8PrivateKey() ExportPkcs8PrivateKey() ExportPkcs8PrivateKey()

Exportuje aktuální klíč ve formátu PKCS # 8 PrivateKeyInfo.Exports the current key in the PKCS#8 PrivateKeyInfo format.

(Inherited from AsymmetricAlgorithm)
ExportSubjectPublicKeyInfo() ExportSubjectPublicKeyInfo() ExportSubjectPublicKeyInfo() ExportSubjectPublicKeyInfo()

Exportuje část aktuálního klíče veřejného klíče ve formátu X. 509 SubjectPublicKeyInfo.Exports the public-key portion of the current key in the X.509 SubjectPublicKeyInfo format.

(Inherited from AsymmetricAlgorithm)
FromXmlString(String) FromXmlString(String) FromXmlString(String) FromXmlString(String)

Rekonstruuje DSA objekt z řetězce XML.Reconstructs a DSA object from an XML string.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Slouží jako výchozí funkce hash.Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

Získá Type aktuální instance.Gets the Type of the current instance.

(Inherited from Object)
HashData(Byte[], Int32, Int32, HashAlgorithmName) HashData(Byte[], Int32, Int32, HashAlgorithmName) HashData(Byte[], Int32, Int32, HashAlgorithmName) HashData(Byte[], Int32, Int32, HashAlgorithmName)

Při přepsání v odvozené třídě vypočítá hodnotu hash zadané části bajtového pole pomocí zadaného algoritmu hash.When overridden in a derived class, computes the hash value of a specified portion of a byte array by using a specified hashing algorithm.

HashData(Stream, HashAlgorithmName) HashData(Stream, HashAlgorithmName) HashData(Stream, HashAlgorithmName) HashData(Stream, HashAlgorithmName)

Při přepsání v odvozené třídě vypočítá hodnotu hash zadaného binárního datového proudu pomocí zadaného algoritmu hash.When overridden in a derived class, computes the hash value of a specified binary stream by using a specified hashing algorithm.

ImportEncryptedPkcs8PrivateKey(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Int32) ImportEncryptedPkcs8PrivateKey(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Int32) ImportEncryptedPkcs8PrivateKey(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Int32) ImportEncryptedPkcs8PrivateKey(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Int32)

Importuje veřejné a privátní souboru KeyPair ze struktury PKCS # 8 EncryptedPrivateKeyInfo po dešifrování pomocí hesla založeného na bajtech a nahradí klíče pro tento objekt.Imports the public/private keypair from a PKCS#8 EncryptedPrivateKeyInfo structure after decrypting with a byte-based password, replacing the keys for this object.

ImportEncryptedPkcs8PrivateKey(ReadOnlySpan<Char>, ReadOnlySpan<Byte>, Int32) ImportEncryptedPkcs8PrivateKey(ReadOnlySpan<Char>, ReadOnlySpan<Byte>, Int32) ImportEncryptedPkcs8PrivateKey(ReadOnlySpan<Char>, ReadOnlySpan<Byte>, Int32) ImportEncryptedPkcs8PrivateKey(ReadOnlySpan<Char>, ReadOnlySpan<Byte>, Int32)

Importuje veřejné a privátní souboru KeyPair ze struktury PKCS # 8 EncryptedPrivateKeyInfo po dešifrování pomocí hesla založeného na znaku a nahradí klíče pro tento objekt.Imports the public/private keypair from a PKCS#8 EncryptedPrivateKeyInfo structure after decrypting with a char-based password, replacing the keys for this object.

ImportParameters(DSAParameters) ImportParameters(DSAParameters) ImportParameters(DSAParameters) ImportParameters(DSAParameters)

Při přepsání v odvozené třídě naimportuje zadaný DSAParameters.When overridden in a derived class, imports the specified DSAParameters.

ImportPkcs8PrivateKey(ReadOnlySpan<Byte>, Int32) ImportPkcs8PrivateKey(ReadOnlySpan<Byte>, Int32) ImportPkcs8PrivateKey(ReadOnlySpan<Byte>, Int32) ImportPkcs8PrivateKey(ReadOnlySpan<Byte>, Int32)

Po dešifrování importuje veřejné a privátní souboru KeyPair ze struktury PKCS # 8 PrivateKeyInfo a nahradí klíče pro tento objekt.Imports the public/private keypair from a PKCS#8 PrivateKeyInfo structure after decryption, replacing the keys for this object.

ImportSubjectPublicKeyInfo(ReadOnlySpan<Byte>, Int32) ImportSubjectPublicKeyInfo(ReadOnlySpan<Byte>, Int32) ImportSubjectPublicKeyInfo(ReadOnlySpan<Byte>, Int32) ImportSubjectPublicKeyInfo(ReadOnlySpan<Byte>, Int32)

Importuje veřejný klíč ze struktury X. 509 SubjectPublicKeyInfo po dešifrování a nahrazuje klíče pro tento objekt.Imports the public key from an X.509 SubjectPublicKeyInfo structure after decryption, replacing the keys for this object.

MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Vytvoří Mělkou kopii aktuální Object.Creates a shallow copy of the current Object.

(Inherited from Object)
SignData(Byte[], HashAlgorithmName) SignData(Byte[], HashAlgorithmName) SignData(Byte[], HashAlgorithmName) SignData(Byte[], HashAlgorithmName)

Vypočítá hodnotu hash zadaného bajtového pole pomocí zadaného algoritmu hash a podepíše výslednou hodnotu hash.Computes the hash value of the specified byte array using the specified hash algorithm and signs the resulting hash value.

SignData(Byte[], Int32, Int32, HashAlgorithmName) SignData(Byte[], Int32, Int32, HashAlgorithmName) SignData(Byte[], Int32, Int32, HashAlgorithmName) SignData(Byte[], Int32, Int32, HashAlgorithmName)

Vypočítá hodnotu hash části zadaného bajtového pole pomocí zadaného algoritmu hash a podepíše výslednou hodnotu hash.Computes the hash value of a portion of the specified byte array using the specified hash algorithm and signs the resulting hash value.

SignData(Stream, HashAlgorithmName) SignData(Stream, HashAlgorithmName) SignData(Stream, HashAlgorithmName) SignData(Stream, HashAlgorithmName)

Vypočítá hodnotu hash zadaného datového proudu pomocí zadaného algoritmu hash a podepíše výslednou hodnotu hash.Computes the hash value of the specified stream using the specified hash algorithm and signs the resulting hash value.

ToString() ToString() ToString() ToString()

Vrací řetězec, který představuje aktuální objekt.Returns a string that represents the current object.

(Inherited from Object)
ToXmlString(Boolean) ToXmlString(Boolean) ToXmlString(Boolean) ToXmlString(Boolean)

Vytvoří a vrátí reprezentaci řetězce XML aktuálního DSA objektu.Creates and returns an XML string representation of the current DSA object.

TryCreateSignature(ReadOnlySpan<Byte>, Span<Byte>, Int32) TryCreateSignature(ReadOnlySpan<Byte>, Span<Byte>, Int32) TryCreateSignature(ReadOnlySpan<Byte>, Span<Byte>, Int32) TryCreateSignature(ReadOnlySpan<Byte>, Span<Byte>, Int32)

Pokusí se vytvořit podpis DSA pro zadaný algoritmus hash do zadané vyrovnávací paměti.Attempts to create the DSA signature for the specified hash into the provided buffer.

TryExportEncryptedPkcs8PrivateKey(ReadOnlySpan<Byte>, PbeParameters, Span<Byte>, Int32) TryExportEncryptedPkcs8PrivateKey(ReadOnlySpan<Byte>, PbeParameters, Span<Byte>, Int32) TryExportEncryptedPkcs8PrivateKey(ReadOnlySpan<Byte>, PbeParameters, Span<Byte>, Int32) TryExportEncryptedPkcs8PrivateKey(ReadOnlySpan<Byte>, PbeParameters, Span<Byte>, Int32)

Pokusí se exportovat aktuální klíč ve formátu PKCS # 8 EncryptedPrivateKeyInfo do zadané vyrovnávací paměti pomocí hesla založeného na bajtech.Attempts to export the current key in the PKCS#8 EncryptedPrivateKeyInfo format into a provided buffer, using a byte-based password.

TryExportEncryptedPkcs8PrivateKey(ReadOnlySpan<Char>, PbeParameters, Span<Byte>, Int32) TryExportEncryptedPkcs8PrivateKey(ReadOnlySpan<Char>, PbeParameters, Span<Byte>, Int32) TryExportEncryptedPkcs8PrivateKey(ReadOnlySpan<Char>, PbeParameters, Span<Byte>, Int32) TryExportEncryptedPkcs8PrivateKey(ReadOnlySpan<Char>, PbeParameters, Span<Byte>, Int32)

Pokusí se exportovat aktuální klíč ve formátu PKCS # 8 EncryptedPrivateKeyInfo do zadané vyrovnávací paměti pomocí hesla založeného na typu char.Attempts to export the current key in the PKCS#8 EncryptedPrivateKeyInfo format into a provided buffer, using a char-based password.

TryExportPkcs8PrivateKey(Span<Byte>, Int32) TryExportPkcs8PrivateKey(Span<Byte>, Int32) TryExportPkcs8PrivateKey(Span<Byte>, Int32) TryExportPkcs8PrivateKey(Span<Byte>, Int32)

Pokusí se exportovat aktuální klíč ve formátu PKCS # 8 PrivateKeyInfo do zadané vyrovnávací paměti.Attempts to export the current key in the PKCS#8 PrivateKeyInfo format into a provided buffer.

TryExportSubjectPublicKeyInfo(Span<Byte>, Int32) TryExportSubjectPublicKeyInfo(Span<Byte>, Int32) TryExportSubjectPublicKeyInfo(Span<Byte>, Int32) TryExportSubjectPublicKeyInfo(Span<Byte>, Int32)

Pokusí se exportovat aktuální klíč ve formátu X. 509 SubjectPublicKeyInfo do zadané vyrovnávací paměti.Attempts to export the current key in the X.509 SubjectPublicKeyInfo format into a provided buffer.

TryHashData(ReadOnlySpan<Byte>, Span<Byte>, HashAlgorithmName, Int32) TryHashData(ReadOnlySpan<Byte>, Span<Byte>, HashAlgorithmName, Int32) TryHashData(ReadOnlySpan<Byte>, Span<Byte>, HashAlgorithmName, Int32) TryHashData(ReadOnlySpan<Byte>, Span<Byte>, HashAlgorithmName, Int32)

Pokusí se vypočítat hodnotu hash poskytnutých dat do zadané vyrovnávací paměti.Attempts to compute the hash value of the provided data into a provided buffer.

TrySignData(ReadOnlySpan<Byte>, Span<Byte>, HashAlgorithmName, Int32) TrySignData(ReadOnlySpan<Byte>, Span<Byte>, HashAlgorithmName, Int32) TrySignData(ReadOnlySpan<Byte>, Span<Byte>, HashAlgorithmName, Int32) TrySignData(ReadOnlySpan<Byte>, Span<Byte>, HashAlgorithmName, Int32)

Pokusí se vytvořit podpis DSA pro zadaná data do zadané vyrovnávací paměti.Attempts to create the DSA signature for the specified data into the provided buffer.

VerifyData(Byte[], Byte[], HashAlgorithmName) VerifyData(Byte[], Byte[], HashAlgorithmName) VerifyData(Byte[], Byte[], HashAlgorithmName) VerifyData(Byte[], Byte[], HashAlgorithmName)

Ověřuje, zda je digitální podpis platný, pomocí výpočtu hodnoty hash zadaných dat pomocí zadaného algoritmu hash a porovnání s poskytnutou signaturou.Verifies that a digital signature is valid by calculating the hash value of the specified data using the specified hash algorithm and comparing it to the provided signature.

VerifyData(Byte[], Int32, Int32, Byte[], HashAlgorithmName) VerifyData(Byte[], Int32, Int32, Byte[], HashAlgorithmName) VerifyData(Byte[], Int32, Int32, Byte[], HashAlgorithmName) VerifyData(Byte[], Int32, Int32, Byte[], HashAlgorithmName)

Ověřuje, zda je digitální podpis platný, výpočtem hodnoty hash dat v části pole bajtů pomocí zadaného algoritmu hash a porovnáním s poskytnutou signaturou.Verifies that a digital signature is valid by calculating the hash value of the data in a portion of a byte array using the specified hash algorithm and comparing it to the provided signature.

VerifyData(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, HashAlgorithmName) VerifyData(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, HashAlgorithmName) VerifyData(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, HashAlgorithmName) VerifyData(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, HashAlgorithmName)

Ověřuje, jestli je digitální podpis platný, pomocí výpočtu hodnoty hash dat v rozsahu bajtů pomocí zadaného algoritmu hash a porovnání s poskytnutým podpisem.Verifies that a digital signature is valid by calculating the hash value of the data in a byte span using the specified hash algorithm and comparing it to the provided signature.

VerifyData(Stream, Byte[], HashAlgorithmName) VerifyData(Stream, Byte[], HashAlgorithmName) VerifyData(Stream, Byte[], HashAlgorithmName) VerifyData(Stream, Byte[], HashAlgorithmName)

Ověřuje, zda je digitální podpis platný, pomocí výpočtu hodnoty hash zadaného datového proudu pomocí zadaného algoritmu hash a porovnání s poskytnutou signaturou.Verifies that a digital signature is valid by calculating the hash value of the specified stream using the specified hash algorithm and comparing it to the provided signature.

VerifySignature(Byte[], Byte[]) VerifySignature(Byte[], Byte[]) VerifySignature(Byte[], Byte[]) VerifySignature(Byte[], Byte[])

Při přepsání v odvozené třídě ověří DSA podpis pro zadaná data.When overridden in a derived class, verifies the DSA signature for the specified data.

VerifySignature(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>) VerifySignature(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>) VerifySignature(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>) VerifySignature(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>)

Ověřuje, jestli je digitální podpis platný pro zadanou hodnotu hash dat.Verifies that a digital signature is valid for a provided data hash.

Vlastnosti

KeyExchangeAlgorithm KeyExchangeAlgorithm KeyExchangeAlgorithm KeyExchangeAlgorithm

Při přepsání v odvozené třídě získá název algoritmu výměny klíčů.When overridden in a derived class, gets the name of the key exchange algorithm. V opačném případě NotImplementedExceptionvyvolá výjimku.Otherwise, throws an NotImplementedException.

(Inherited from AsymmetricAlgorithm)
KeySize KeySize KeySize KeySize

Získá nebo nastaví velikost klíčového modulu používaného asymetrickým algoritmem v bitech.Gets or sets the size, in bits, of the key modulus used by the asymmetric algorithm.

(Inherited from AsymmetricAlgorithm)
LegalKeySizes LegalKeySizes LegalKeySizes LegalKeySizes

Získá velikosti klíčů, které jsou podporovány asymetrickým algoritmem.Gets the key sizes that are supported by the asymmetric algorithm.

(Inherited from AsymmetricAlgorithm)
SignatureAlgorithm SignatureAlgorithm SignatureAlgorithm SignatureAlgorithm

Při implementaci v odvozené třídě získá název algoritmu podpisu.When implemented in a derived class, gets the name of the signature algorithm. V opačném případě vždy NotImplementedExceptionvyvolá výjimku.Otherwise, always throws a NotImplementedException.

(Inherited from AsymmetricAlgorithm)

Pole

KeySizeValue KeySizeValue KeySizeValue KeySizeValue

Představuje velikost klíčového modulu používaného asymetrickým algoritmem v bitech.Represents the size, in bits, of the key modulus used by the asymmetric algorithm.

(Inherited from AsymmetricAlgorithm)
LegalKeySizesValue LegalKeySizesValue LegalKeySizesValue LegalKeySizesValue

Určuje velikosti klíčů, které jsou podporovány asymetrickým algoritmem.Specifies the key sizes that are supported by the asymmetric algorithm.

(Inherited from AsymmetricAlgorithm)

Explicitní implementace rozhraní

IDisposable.Dispose() IDisposable.Dispose() IDisposable.Dispose() IDisposable.Dispose()

Popis tohoto člena naleznete v tématu Dispose().For a description of this member, see Dispose().

(Inherited from AsymmetricAlgorithm)

Platí pro

Viz také