Prüfsumme für einen Text

chriss_2oo4

Erfahrenes Mitglied
Hi,

ich möchte gerne eine Prüfsumme von einem Text erzeugen und diese zur Sicherheit speichern. Dazu gibt es ja unterschiedliche Algorithmen, aber ich bin mir nicht sicher, welcher der richtige für micht ist.Der Text ist nicht sonderlich lang -> CRC müsste sich doch dafür eignen? Wenn ja, gibt es schon fertige Klassen für crc, oder evtl ein Codebeispiel? Hab mir den Eintrag in Wikipedia schon durchgelesen, ist auch einigermaßen verständlich, aber dazu müsste ich doch den Text (String) in eine Byte-Folge umwandeln, des Weiteren weiss ich nicht welches Generatorpolynom ich verwenden soll?

Wenn es einen Algorithmus / ein Verfahren gibt, das sich besser eigent, würd ich natürlich auch umsteigen.

Lg Chriss
 
Hallo Chris,

eine andere Möglichkeit für Tests wären außer CRC noch die verschiedenen Hash-Verfahren. Diese sind im NET.Framework unter System.Security zu finden. (Unterordner Cryptography ?)
Eine Umwandlung von String in Byte-Array wäre notwendig, aber das kannst du mit 2 oder 3 Befehlen machen. Da gabs mal einen Thread "String in Byte-Array umwandeln" oder so ähnlich. Die Rückumwandlung wäre für die Hashs dann nötig.


MfG Calvin
 
Guck mal:
C#:
using System;

public class Crc16 {
    const ushort polynomial = 0xA001;
    ushort[] table = new ushort[256];

    public ushort ComputeChecksum(byte[] bytes) {
        ushort crc = 0;
        for(int i = 0; i < bytes.Length; i++) {
            byte index = (byte)(crc ^ bytes[i]);
            crc = (ushort)((crc >> 8) ^ table[index]);
        }
        return crc;
    }

    public byte[] ComputeChecksumBytes(byte[] bytes) {
        ushort crc = ComputeChecksum(bytes);
        return new byte[] { (byte)(crc >> 8), (byte)(crc & 0x00ff) };
    }

    public Crc16() {
        ushort value;
        ushort temp;
        for(ushort i = 0; i < table.Length; i++) {
            value = 0;
            temp = i;
            for(byte j = 0; j < 8; j++) {
                if(((value ^ temp) & 0x0001) != 0) {
                    value = (ushort)((value >> 1) ^ polynomial);
                }else {
                    value >>= 1;
                }
                temp >>= 1;
            }
            table[i] = value;
        }
    }
}
 

Neue Beiträge

Zurück