|
If Windows security isn't enough, you should probably only protect the particular applications you write.
|
|
|
|
|
this isn't about windows security.
on the smartcard is written student information and this is a way to check if student is present, save info about him etc.
and the side effect is that the application should block student account (in some way) to prevent using it without putting in the smartcard
|
|
|
|
|
How about a thumbprint thingy then?
|
|
|
|
|
You may want to look into a smart card framework like this. After that, it's a simple google search to figure out how to block the mouse and keyboard - perhaps you could achieve this by using the SwitchDesktop API call, since IIRC this is the way that the Lock Computer functionality works.
Another option; if you wanted to, couldn't you just call the LockWindow API function - it won't lock the keyboard and mouse, but that might (not certain) have smart card reader functionality built in, depending on which version of MSGINA you have
Just a few ideas to get you started
|
|
|
|
|
orescik wrote: when you turn on computer you see windows login screen, to the computer is connected smartcard reader, when you put the card it checks it. When it is ok windows login on a specific user.
I recommend first you read and understand Winlogon and GINA[^]. The only way you can do what you want is replacing some of the Winlogon functionality. You many want to think hard if you really want this. It is doable but not easy task.
orescik wrote: or alternative version:
you login as a user, application in c# opens adn blocks mouse and keybord (fullscreen application i think. It asks user for a smart card and after checking it it unblocks computer.
This seems better choice than the first one. But Windows is preemptive OS. Are you sure you want to take full control just to block the user?
Instead, what I would do is, when your application starts, the first thing you want to do is check for smart card presence, then read whatever you want to read and validate your input. When every thing is ok, allow the application to run, otherwise exit the application gracefully. This way you are confined to your application, your application become portable and you don't have to replace Windows functionality.
Here this may help you get started with smart card APIs[^]
just my 2 cents
Yusuf
Oh didn't you notice, analogous to square roots, they recently introduced rectangular, circular, and diamond roots to determine the size of the corresponding shapes when given the area. Luc Pattyn[^]
|
|
|
|
|
Hallo everybody,
is there any class, library or DLL to clone a partition into another with C# ?
|
|
|
|
|
is this [^] what you looking for?
Yusuf
Oh didn't you notice, analogous to square roots, they recently introduced rectangular, circular, and diamond roots to determine the size of the corresponding shapes when given the area. Luc Pattyn[^]
|
|
|
|
|
no, i am talking of partitions in hard disks.
Though the name is the same, the topic you pointed me to regards OLAP and BI with SSAS, a totally different matter.
thanks anyway.
|
|
|
|
|
Hi .... everyone !
I have Java -> C# Programming Problem , plz help !
it's delay 1 week to solve it , plz help ......
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
public class MyGen
{
private const string LL = "keygen";
public virtual string getSerial(string userId, string licenseNum)
{
DateTime cal = new DateTime();
cal.Add(1, 3);
cal.Add(6, -1);
NumberFormat nf = new java.text.DecimalFormat("000");
licenseNum = nf.format(Convert.ToInt32(licenseNum));
string verTime = new StringBuilder("-").Append(new java.text.SimpleDateFormat("yyMMdd").format(cal.getTime())).Append("0").ToString();
string type = "YE3MP-";
string need = new StringBuilder(userId.Substring(0, 1)).Append(type).Append("300").Append(licenseNum).Append(verTime).ToString();
string dx = new StringBuilder(need).Append(LL).Append(userId).ToString();
int suf = this.decode(dx);
string code = new StringBuilder(need).Append(Convert.ToString(suf)).ToString();
return this.change(code);
}
private int decode(string s)
{
int i;
char[] ac;
int j;
int k;
i = 0;
ac = s.ToCharArray();
j = 0;
k = ac.Length;
while (j < k)
{
i = (31 * i) + ac[j];
j++;
}
return Math.Abs(i);
}
private string change(string s)
{
sbyte[] abyte0;
char[] ac;
int i;
int k;
int j;
abyte0 = s;
ac = new char[s.Length];
i = 0;
k = abyte0.Length;
while (i < k)
{
j = abyte0[i];
if ((j >= 48) && (j <= 57))
{
j = (((j - 48) + 5) % 10) + 48;
}
else if ((j >= 65) && (j <= 90))
{
j = (((j - 65) + 13) % 26) + 65;
}
else if ((j >= 97) && (j <= 122))
{
j = (((j - 97) + 13) % 26) + 97;
}
ac[i] = (char)j;
i++;
}
return Convert.ToString(ac);
}
public MyGen()
: base()
{
}
static void Main(string[] args)
{
try
{
Console.WriteLine("please input register name:");
string userId = null;
userId = System.Console.ReadLine();
MyGen MyGen = new MyGen();
string res = MyGen.getSerial(userId, "5");
Console.WriteLine("Serial:" + res);
System.Console.ReadLine();
}
catch (IOException ex)
{
}
}
}
garnett
|
|
|
|
|
So, and what is your exact problem? Does the code not run?
To format text within C# use e.g. the ToString()-method of DateTime. There you can pass the "yyMMdd" format. Formatting the license number is done within the ToString()-method of int32. I think you can pass the same formatstring "000" there as in Java.
Regards
Sebastian
|
|
|
|
|
Hi .... SeMartens
Right ! it can't work , compiler show 7 bugs .
Sorry for my pool programming ability.....I still don't know how to modify this code ....
garnett
|
|
|
|
|
What are the bugs? Copy and paste the compiler errors. Text, line numbers, everything. If you want to be especially helpful, bold the lines where these errors occur and put the error text in comments on the same line
|
|
|
|
|
bug list ........
Wrong 1 Method ' Add' Any has not carried uses ' 2' Argument F:\Documents\Visual Studio 2008 \ Projects \ Keygen \ Keygen \ Program.cs 16 9 Keygen
Wrong 2 Method ' Add' Any has not carried uses ' 2' Argument F:\Documents\Visual Studio 2008 \ Projects \ Keygen \ Keygen \ Program.cs 17 9 Keygen
Wrong 3 Could not find the variant or naming space name ' NumberFormat' (you whether to omit the using pointer word or module reference?) F:\Documents\Visual Studio 2008 \ Projects \ Keygen \ Keygen \ Program.cs 19 9 Keygen
Wrong 4 Could not find the variant or naming space name ' java' (you whether to omit the using pointer word or module reference?) F:\Documents\Visual Studio 2008 \ Projects \ Keygen \ Keygen \ Program.cs 19 31 Keygen
Wrong 5 Could not find the variant or naming space name ' java' (you whether to omit the using pointer word or module reference?) F:\Documents\Visual Studio 2008 \ Projects \ Keygen \ Keygen \ Program.cs 21 60 Keygen
Wrong 6 ' System.DateTime' Does not contain ' getTime' Definition, could also not find expansion method ' getTime' Accepts variant ' System.DateTime' The first argument (you whether to omit the using pointer word or module reference?) F:\Documents\Visual Studio 2008 \ Projects \ Keygen \ Keygen \ Program.cs 21 108 Keygen
Wrong 7 Is unable variant ' string' The concealment transformation is ' sbyte[]' F:\Documents\Visual Studio 2008 \ Projects \ Keygen \ Keygen \ Program.cs 55 18 Keygen
garnett
|
|
|
|
|
I understand English is not your first language. But If you can understand previous posts, sure you can understand the compiler errors.
The compiler saw something that it did not recognize. Read it again. It gave you amble explanations. It is saying Method does not exist. What do you think that means? Think about it.
Yusuf
Oh didn't you notice, analogous to square roots, they recently introduced rectangular, circular, and diamond roots to determine the size of the corresponding shapes when given the area. Luc Pattyn[^]
|
|
|
|
|
Right. First of all, you haven't said what DateTime.Add does in Java (in particular, does it add seconds, minutes, days, etc). Either way, the DateTime.AddSeconds, DateTime.AddMinutes, DateTime.AddDays methods should help. 'string licenseNum' should 'ref string licenseNum' if you plan to persist the changes. These will get rid of Wrongs 1 and 2
For your number formatting, you simply need to set licenseNum to Integer.Parse(licenseNum).ToString("000"), and this will get rid of Wrong 3
cal.getTime() can be replaced with DateTime.Now
The java.text.simpleDateFormat stuff can be replaced with cal.ToString("yyMMdd")
You cannot set an array of sbyte to a string. Just set k to s.Length and j to char.ConvertToUtf32(s, i)
|
|
|
|
|
First of all creating the date:
<br />
DateTime dDate = DateTime.Now.AddYears(3);<br />
To format the license key into a three-digit number use:
<br />
licenseNum = Int32.Parse(licenseNum).ToString("D3"); <br />
The date can be converted using
<br />
string verTime = "-" + dDate.ToString("yyMMdd") + "0";<br />
Convert all other lines according to this.
Hope this helps you a bit.
Regards
Sebastian
|
|
|
|
|
java code is below :
java.util.Calendar cal = java.util.Calendar.getInstance();
cal.add(1, 3);
cal.add(6, -1);
java.text.NumberFormat nf = new java.text.DecimalFormat("000");
licenseNum = nf.format(Integer.valueOf(licenseNum));
and here "sbyte" method has some problem
private string change(string s)
{
//sbyte[] abyte0;
char[] ac;
int i;
int k;
int j;
//abyte0 = s;
ac = new char[s.Length];
i = 0;
k = s.Length;
while (i < k)
{
j = char.ConvertToUtf32(s, i);
if ((j >= 48) && (j <= 57))
garnett
|
|
|
|
|
Thanks everyone again !
but the code that I modified is below,but still has problem:
---------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
public class MyGen
{
private const string LL = "keygen";
public virtual string getSerial(string userId, string licenseNum)
{
DateTime dDate = DateTime.Now.AddYears(3);<br />
dDate.Add(1, 3);<br />
dDate.Add(6, -1);
licenseNum = Int32.Parse(licenseNum).ToString("D3");
string verTime = "-" + dDate.ToString("yyMMdd") + "0";
string type = "YE3MP-";
string need = new StringBuilder(userId.Substring(0, 1)).Append(type).Append("300").Append(licenseNum).Append(verTime).ToString();
string dx = new StringBuilder(need).Append(LL).Append(userId).ToString();
int suf = this.decode(dx);
string code = new StringBuilder(need).Append(Convert.ToString(suf)).ToString();
return this.change(code);
}
private int decode(string s)
{
int i;
char[] ac;
int j;
int k;
i = 0;
ac = s.ToCharArray();
j = 0;
k = ac.Length;
while (j < k)
{
i = (31 * i) + ac[j];
j++;
}
return Math.Abs(i);
}
private string change(string s)
{
sbyte[] abyte0;
char[] ac;
int i;
int k;
int j;
abyte0 = s;<br />
ac = new char[s.Length];<br />
i = 0;<br />
k = s.Length;<br />
while (i < k)<br />
{<br />
j = char.ConvertToUtf32(s, i);
if ((j >= 48) && (j <= 57))
{
j = (((j - 48) + 5) % 10) + 48;
}
else if ((j >= 65) && (j <= 90))
{
j = (((j - 65) + 13) % 26) + 65;
}
else if ((j >= 97) && (j <= 122))
{
j = (((j - 97) + 13) % 26) + 97;
}
ac[i] = (char)j;
i++;
}
return Convert.ToString(ac);
}
public MyGen()
: base()
{
}
static void Main(string[] args)
{
try
{
Console.WriteLine("please input register name:");
string userId = null;
userId = System.Console.ReadLine();
MyGen MyGen = new MyGen();
string res = MyGen.getSerial(userId, "5");
Console.WriteLine("Serial:" + res);
System.Console.ReadLine();
}
catch (IOException ex)
{
}
}
}
garnett
|
|
|
|
|
Remove the fourth highlighted line. However, you need to say: what do the second and third highlighted lines do?
You are also missing the new list of errors
|
|
|
|
|
If I Remove the fourth highlighted line,and mark //abyte0 = s;
the problem remain
DateTime dDate = DateTime.Now.AddYears(3);
dDate.Add(1, 3);
dDate.Add(6, -1);
error show dDate.Add can't overload 2 arguments
and I think "DateTime.Now.AddYears(3)" is wrong to orginal too...
garnett
|
|
|
|
|
Yes, but what would those lines do in java?
|
|
|
|
|
|
Got it. The first line is dDate.AddYears(3);
The second line is dDate.AddDays(-1);
Do you really intend to initialise dDate to a date three years in the future? Based on your original code, you just want it to be initialised to DateTime.Now
By the way, it makes life a lot easier for other people if you use descriptive values. java.util.Calendar contained a list of constants which would have made life a lot easier
|
|
|
|
|
Hi ... Thanks again !
I pass for compiler this code , but the output is wrong
when I run keygen.exe
input name : test
it show
Serial:System.Char[]
somewhere is still wrong .....
---------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
public class MyGen
{
private const string LL = "keygen";
public virtual string getSerial(string userId, string licenseNum)
{
DateTime dDate = DateTime.Now;
dDate.AddYears(3);
dDate.AddDays(-1);
//dDate.Add(1, 3);
//dDate.Add(6, -1);
licenseNum = Int32.Parse(licenseNum).ToString("D3");
string verTime = "-" + dDate.ToString("yyMMdd") + "0";
string type = "YE3MP-";
string need = new StringBuilder(userId.Substring(0, 1)).Append(type).Append("300").Append(licenseNum).Append(verTime).ToString();
string dx = new StringBuilder(need).Append(LL).Append(userId).ToString();
int suf = this.decode(dx);
string code = new StringBuilder(need).Append(Convert.ToString(suf)).ToString();
return this.change(code);
}
private int decode(string s)
{
int i;
char[] ac;
int j;
int k;
i = 0;
ac = s.ToCharArray();
j = 0;
k = ac.Length;
while (j < k)
{
i = (31 * i) + ac[j];
j++;
}
return Math.Abs(i);
}
private string change(string s)
{
//sbyte[] abyte0;
char[] ac;
int i;
int k;
int j;
//abyte0 = s;
ac = new char[s.Length];
i = 0;
k = s.Length;
while (i < k)
{
j = char.ConvertToUtf32(s, i);
if ((j >= 48) && (j <= 57))
{
j = (((j - 48) + 5) % 10) + 48;
}
else if ((j >= 65) && (j <= 90))
{
j = (((j - 65) + 13) % 26) + 65;
}
else if ((j >= 97) && (j <= 122))
{
j = (((j - 97) + 13) % 26) + 97;
}
ac[i] = (char)j;
i++;
}
return Convert.ToString(ac);
}
public MyGen() : base()
{
}
static void Main(string[] args)
{
try
{
System.Console.WriteLine("please input register name:");
string userId = null;
userId = System.Console.ReadLine();
MyGen MyGen = new MyGen();
string res = MyGen.getSerial(userId, "5");
System.Console.WriteLine("Serial:" + res);
System.Console.ReadLine();
}
catch (IOException ex)
{
}
}
}
garnett
|
|
|
|
|
It's the 'Convert.ToString(ac)' line in the change() function. You need to return 'new string(ac)'
|
|
|
|