【发布时间】:2015-12-17 20:00:44
【问题描述】:
我得到:
公共类中需要公共 Main() 方法
运行此脚本时出错:
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
public class Program {
public static void Main(string[] args) {
//Shared 256 bit Key and IV here
const string sKy = "lkirwf897+22#bbtrm8814z5qq=498j5"; //32 chr shared ascii string (32 * 8 = 256 bit)
const string sIV = "741952hheeyy66#cs!9hjv887mxx7@8y"; //32 chr shared ascii string (32 * 8 = 256 bit)
var sTextVal = "Here is my data to encrypt!!!";
var eText = EncryptRJ256(sKy, sIV, sTextVal);
var dText = DecryptRJ256(sKy, sIV, eText);
Console.WriteLine("key: " + sKy);
Console.WriteLine();
Console.WriteLine(" iv: " + sIV);
Console.WriteLine("txt: " + sTextVal);
Console.WriteLine("encrypted: " + eText);
Console.WriteLine("decrypted: " + dText);
Console.WriteLine("press any key to exit");
Console.ReadKey(true);
}
public static string DecryptRJ256(string prm_key, string prm_iv, string prm_text_to_decrypt) {
var sEncryptedString = prm_text_to_decrypt;
var myRijndael = new RijndaelManaged() {
Padding = PaddingMode.Zeros,
Mode = CipherMode.CBC,
KeySize = 256,
BlockSize = 256
};
var key = Encoding.ASCII.GetBytes(prm_key);
var IV = Encoding.ASCII.GetBytes(prm_iv);
var decryptor = myRijndael.CreateDecryptor(key, IV);
var sEncrypted = Convert.FromBase64String(sEncryptedString);
var fromEncrypt = new byte[sEncrypted.Length];
var msDecrypt = new MemoryStream(sEncrypted);
var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);
csDecrypt.Read(fromEncrypt, 0, fromEncrypt.Length);
return (Encoding.ASCII.GetString(fromEncrypt));
}
public static string EncryptRJ256(string prm_key, string prm_iv, string prm_text_to_encrypt) {
var sToEncrypt = prm_text_to_encrypt;
var myRijndael = new RijndaelManaged() {
Padding = PaddingMode.Zeros,
Mode = CipherMode.CBC,
KeySize = 256,
BlockSize = 256
};
var key = Encoding.ASCII.GetBytes(prm_key);
var IV = Encoding.ASCII.GetBytes(prm_iv);
var encryptor = myRijndael.CreateEncryptor(key, IV);
var msEncrypt = new MemoryStream();
var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write);
var toEncrypt = Encoding.ASCII.GetBytes(sToEncrypt);
csEncrypt.Write(toEncrypt, 0, toEncrypt.Length);
csEncrypt.FlushFinalBlock();
var encrypted = msEncrypt.ToArray();
return (Convert.ToBase64String(encrypted));
}
}
我还没有开始理解错误在哪里。
【问题讨论】:
-
以下答案并不完全重复,但可能会回答您的问题:stackoverflow.com/questions/14688756/…
-
您能否发布在 Visual Studio 中显示的异常的屏幕截图?我主要对 what 想要那种方法感兴趣。至于为什么不使用
public作为你的输入方法:msdn.microsoft.com/en-us/library/acy3edy3.aspx -
您能否确认您是通过Web IDE(例如.NET Fiddle)构建的?此错误在正常情况下不会发生,但 Google 显示 .NET Fiddle 会发出很多此错误。 C# 语言规范当然不要求
Main公开访问。 -
@JeppeStigNielsen 即使在 .Net Fiddle 中我也无法得到错误...
-
@Thomas 不,不是问题的代码,你是对的。但是,如果您在 .NET Fiddle 中创建一个新的控制台项目,然后限制对
Main或包含它的类 (Program) 的访问,您可以获得引用的消息。此消息Public Main() method is required in a public class不能来自兼容的 C# 编译器。
标签: c#