Esempio n. 1
0
        private static byte[] DecodeBase64Check(string base64encoded)
        {
            // TODO logic copied from Base58.decodeChecked -> can this be reused
            // here?
            Base64Encoder enc = new Base64Encoder();

            byte[] decoded = enc.DecodeData(base64encoded);
            if (decoded.Length < 4)
            {
                throw new FormatException("Input too short");
            }
            byte[] data     = new byte[decoded.Length - 4];
            byte[] checksum = new byte[4];
            Buffer.BlockCopy(decoded, 0, data, 0, data.Length);
            Buffer.BlockCopy(decoded, data.Length, checksum, 0, 4);
            SHA256Managed m = new SHA256Managed();

            byte[] re = m.ComputeHash(data);
            re = m.ComputeHash(re);
            byte[] actualChecksum = new byte[4];
            Buffer.BlockCopy(re, 0, actualChecksum, 0, 4);
            if (!Enumerable.SequenceEqual(checksum, actualChecksum))
            {
                throw new FormatException("Checksum does not validate");
            }
            return(data);
        }
Esempio n. 2
0
        private static string EncodeBase64Check(byte[] input)
        {
            SHA256Managed m = new SHA256Managed();

            byte[] re = m.ComputeHash(input);
            re = m.ComputeHash(re);
            byte[] checksum = new byte[4];
            Buffer.BlockCopy(re, 0, checksum, 0, 4);
            byte[]        base64checksum = input.Concatenate(checksum);
            Base64Encoder enc            = new Base64Encoder();

            return(enc.EncodeData(base64checksum));
        }