VB.net SHA512

Module file_crypt
    Dim input, output, password, codec As String
    Dim b() As Byte
    Dim c() As Byte
    Dim d, k As Integer
    Dim ren As Boolean
    Public Function StringSHA512(ByVal keys As String)
        Dim SHA512 As String = ""
        Dim c As String
        Dim key(100) As Byte
        For n = 0 To keys.Length - 1
            key(n) = Asc(keys.Chars(n))
        Next
        keys = Nothing
        key = System.Security.Cryptography.SHA512.Create().ComputeHash(key)
        For n = 0 To key.Length - 1
            c = Conversion.Hex(key(n))
            If c.Length = 1 Then
                c = "0" & c
            End If
            keys &= c
        Next
        keys = keys.ToLower
        Return keys
    End Function
    Sub Main()
0:      password = ""
        codec = ""
        Console.Title = "文件加密"
        Console.ForegroundColor = ConsoleColor.DarkGreen
        Console.WriteLine("文件加密")
        Console.ForegroundColor = ConsoleColor.White
        Console.WriteLine("输入要编码/解码的文件的路径:")
1:      Console.Write("> ")
        input = Console.ReadLine
        input = input.Replace("/", "\")
        input = input.Replace("""", "")
        If My.Computer.FileSystem.FileExists(input) = False Then
            Console.ForegroundColor = ConsoleColor.Red
            Console.WriteLine("您输入的路径无效!")
            Console.ForegroundColor = ConsoleColor.White
            GoTo 1
        End If
        Dim bytes() As Byte = My.Computer.FileSystem.ReadAllBytes(input)
        Console.WriteLine("输入保存文件的路径:")
2:      Console.Write("> ")
        output = Console.ReadLine
        output = output.Replace("/", "\")
        output = output.Replace("""", "")
        If My.Computer.FileSystem.DirectoryExists(Left(output, output.Length - output.Split("\")(output.Split("\").Length - 1).Length)) = False Then
            Console.ForegroundColor = ConsoleColor.Red
            Console.WriteLine("您输入的路径无效!")
            Console.ForegroundColor = ConsoleColor.White
            GoTo 2
        End If
        If ren = True Then GoTo 3
3:      If My.Computer.FileSystem.FileExists(output) = True Then
            Console.WriteLine("在为输出文件选择的位置中,有另一个文件。")
            Console.WriteLine("键入""继续执行(0)""或""重新输入(1)""。")
4:          Dim answer As String = Console.ReadLine.ToLower
            If answer = "1" Then
                ren = True
                Console.WriteLine("输入保存文件的路径:")
                GoTo 2
            ElseIf answer = "0" Then
                Console.WriteLine("继续进行:")
            ElseIf Not answer = "0" Then
                Console.ForegroundColor = ConsoleColor.Red
                Console.WriteLine("无法识别该命令!")
                Console.ForegroundColor = ConsoleColor.White
                GoTo 4
            End If
        End If
        Console.WriteLine("请输入密码:")
5:      Console.Write("> ")
        password = Console.ReadLine
        If password = "" Then
            Console.ForegroundColor = ConsoleColor.Red
            Console.WriteLine("您尚未输入任何密码!请输入后重试。")
            Console.ForegroundColor = ConsoleColor.White
            GoTo 5
        End If
        password = StringSHA512(password)
        Console.WriteLine("选择文件是应加密(0)还是解密(1):")
6:      Console.Write("> ")
        codec = Console.ReadLine
        If Not codec = "0" And Not codec = "1" Then
            Console.ForegroundColor = ConsoleColor.Red
            Console.WriteLine("尚未输入"“0”" 或 "“1”",然后重试。")
            Console.ForegroundColor = ConsoleColor.White
            GoTo 6
        End If
        k = 0
        Console.ForegroundColor = ConsoleColor.Blue
        If codec = "1" Then
            Console.WriteLine("文件解密开始了!")
            ReDim c(0)
            For n = 0 To bytes.Length - 1
                If password.Length - 1 < k Then k = 0
                d = bytes(n) + Asc(password.Chars(k))
                If d > 255 Then c(0) = d - 256 Else c(0) = d
                My.Computer.FileSystem.WriteAllBytes(output, c, True)
                k += 1
                Console.Title = "加密文件 正在进行中..." & (100 * n / (bytes.Length - 1)).ToString("0.000") & "%"
            Next
        Else
            Console.WriteLine("文件加密开始!")
            ReDim c(0)
            For n = 0 To bytes.Length - 1
                If password.Length - 1 < k Then k = 0
                d = bytes(n) - Asc(password.Chars(k))
                If d < 0 Then c(0) = 256 + d Else c(0) = d
                My.Computer.FileSystem.WriteAllBytes(output, c, True)
                k += 1
                Console.Title = "加密文件 正在进行中... " & (100 * n / (bytes.Length - 1)).ToString("0.000") & "%"
            Next
        End If
        bytes = Nothing
        Console.ForegroundColor = ConsoleColor.Green
        If codec = "1" Then Console.Write("解密") Else Console.Write("加密")
        Console.WriteLine(" 执行成功!")
        Console.ForegroundColor = ConsoleColor.White
        Console.WriteLine("键入""0""以退出,键入""1""以继续。")
7:      Console.Write("> ")
        Dim cmd As String = Console.ReadLine.ToLower
        If cmd = "1" Then
            GoTo 0
        ElseIf Not cmd = "0" Then
            Console.ForegroundColor = ConsoleColor.Red
            Console.WriteLine("无法识别该命令!")
            Console.ForegroundColor = ConsoleColor.White
            GoTo 7
        End If
    End Sub
End Module





Please follow WeChat's public account ByCAD