网络验证功能分析--待补充
一分钟了解sqlserver
注意两点:
1.sqlserver是微软的关系型数据库,登录方式有两种windows身份验证和sql server身份认证。
使用JDBC连接到SQL Server 需要手动开启SQL Server的登录模式。
2.My Sql的端口是3306,安装完了就可以用。SQL Server的端口号是1433默认是关闭的,也要手动开启这个端口,才能连接到这个数据库。
一分钟了解收费版网络验证
网络验证主要实现了对软件收费以及管理,
可可网络验证试用管理端 http://v9.hphu.com:8080/kss_admin/index.php?demo=yes
收费版网络验证的核心功能是防破解和绑定机器。
软件版网络验证
管理端界面
卡密管理界面
建表
NianKa | state |
---|---|
YYHMGLNLPAPYBLMLOEYFAGSTGASYAWYO | 1 |
YYMOSDWOKQPAUKKGTYRMYHNSHHBQFPIY | 1 |
YIFGFLWDVWLCDPFZVIXHIRAVSXGRPGOX | 1 |
1.生成卡密时设置卡密首字母,如Y开头代表年卡(year)
2.用户充值时,先根据首字母判断对应的卡密表(年卡表,月卡表等),
然后查找对应的表,获取卡密是否存在和卡密的state信息。
3.state属性,用来识别卡密的状态。当卡密被使用时,会向数据库发送
“update NianKa set state=2 where NianKa = '” + 用户输入的卡号+ "’;
作者制卡源码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace fuwuqi
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button5_Click_1(object sender, EventArgs e)
{string a = "Data Source=.;Initial Catalog=MyApp;User ID=sa;Password=accp";//连接初始化
SqlConnection b = new SqlConnection(a);
DataTable duixiang = new DataTable();
try
{
b.Open();
SqlDataAdapter da = new SqlDataAdapter("select * from yonghu", b);
da.Fill(duixiang);
dataGridView1.DataSource = duixiang;
}
catch (Exception)
{
MessageBox.Show("连接异常");
}
finally
{
b.Close();
}
}//查询用户
private void Form1_Load(object sender, EventArgs e)//窗体初始化
{
string a = "Data Source=.;Initial Catalog=MyApp;User ID=sa;Password=accp";//连接初始化
SqlConnection b = new SqlConnection(a);
DataTable duixiang = new DataTable();
try
{
b.Open();
SqlDataAdapter da = new SqlDataAdapter("select * from yonghu", b);
da.Fill(duixiang);
dataGridView1.DataSource = duixiang;
SqlCommand fs = new SqlCommand("select gonggao from gonggao",b);
string jieshou = fs.ExecuteScalar().ToString();
textBox3.AppendText(jieshou);
}
catch (Exception)
{
MessageBox.Show("连接异常");
}
finally
{
b.Close();
}
}
private void button1_Click_1(object sender, EventArgs e)
{
string a = "Data Source=.;Initial Catalog=MyApp;User ID=sa;Password=accp";//连接初始化
SqlConnection b = new SqlConnection(a);
string text = comboBox1.Text;
string[] suiji = new string[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "G", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
string[] num = new string[31];
try
{
int s = int.Parse(textBox1.Text);
Random example = new Random();
b.Open();
switch (text)
{case"天卡":
for (int i = 0; i < s; i++)
{
for (int j = 0; j < 31; j++)
{
int number = example.Next(1,26);
num[j]=suiji[number];
}
string shuju = "D" + num[0] + num[1] + num[2] + num[3] + num[4] + num[5] + num[6] + num[7] + num[8] + num[9] + num[10] + num[11] + num[12] + num[13] + num[14] + num[15] + num[16] + num[17] + num[18] + num[19] + num[20] + num[21] + num[22] + num[23] + num[24] + num[25] + num[26] + num[27] + num[28] + num[29] + num[30];
string fasong = "insert into tianka(tianka)values('"+shuju+"')";
SqlCommand fs = new SqlCommand(fasong, b);
fs.ExecuteNonQuery();
}
MessageBox.Show("添加成功! 共添加"+s+"条卡密");
break;
case "周卡":
for (int i = 0; i < s; i++)
{
for (int j = 0; j < 31; j++)
{
int number = example.Next(1,26);
num[j]=suiji[number];
}
string shuju = "W" + num[0] + num[1] + num[2] + num[3] + num[4] + num[5] + num[6] + num[7] + num[8] + num[9] + num[10] + num[11] + num[12] + num[13] + num[14] + num[15] + num[16] + num[17] + num[18] + num[19] + num[20] + num[21] + num[22] + num[23] + num[24] + num[25] + num[26] + num[27] + num[28] + num[29] + num[30];
string fasong = "insert into zhouka(zhouka)values('"+shuju+"')";
SqlCommand fs = new SqlCommand(fasong, b);
fs.ExecuteNonQuery();
}
MessageBox.Show("添加成功! 共添加"+s+"条卡密");
break;
case "月卡":
for (int i = 0; i < s; i++)
{
for (int j = 0; j < 31; j++)
{
int number = example.Next(1,26);
num[j]=suiji[number];
} string shuju = "M" + num[0] + num[1] + num[2] + num[3] + num[4] + num[5] + num[6] + num[7] + num[8] + num[9] + num[10] + num[11] + num[12] + num[13] + num[14] + num[15] + num[16] + num[17] + num[18] + num[19] + num[20] + num[21] + num[22] + num[23] + num[24] + num[25] + num[26] + num[27] + num[28] + num[29] + num[30];
string fasong = "insert into yueka(yueka)values('"+shuju+"')";
SqlCommand fs = new SqlCommand(fasong, b);
fs.ExecuteNonQuery();
}
MessageBox.Show("添加成功! 共添加"+s+"条卡密");
break;
case "季卡":
for (int i = 0; i < s; i++)
{
for (int j = 0; j < 31; j++)
{
int number = example.Next(1,26);
num[j]=suiji[number];}
string shuju = "Q" + num[0] + num[1] + num[2] + num[3] + num[4] + num[5] + num[6] + num[7] + num[8] + num[9] + num[10] + num[11] + num[12] + num[13] + num[14] + num[15] + num[16] + num[17] + num[18] + num[19] + num[20] + num[21] + num[22] + num[23] + num[24] + num[25] + num[26] + num[27] + num[28] + num[29] + num[30];
string fasong = "insert into jika(jika)values('"+shuju+"')";
SqlCommand fs = new SqlCommand(fasong, b);
fs.ExecuteNonQuery();
}
MessageBox.Show("添加成功! 共添加"+s+"条卡密");
break;
case "年卡":
for (int i = 0; i < s; i++)
{
for (int j = 0; j < 31; j++)
{
int number = example.Next(1,26);
num[j]=suiji[number];
}
string shuju = "Y" + num[0] + num[1] + num[2] + num[3] + num[4] + num[5] + num[6] + num[7] + num[8] + num[9] + num[10] + num[11] + num[12] + num[13] + num[14] + num[15] + num[16] + num[17] + num[18] + num[19] + num[20] + num[21] + num[22] + num[23] + num[24] + num[25] + num[26] + num[27] + num[28] + num[29] + num[30];
string fasong = "insert into nianka(nianka)values('"+shuju+"')";
SqlCommand fs = new SqlCommand(fasong, b);
fs.ExecuteNonQuery();
}
MessageBox.Show("添加成功! 共添加"+s+"条卡密");
break;
default:
break;
}
}
catch (Exception)
{
MessageBox.Show("连接异常");
}
finally
{
b.Close();
}
}//添加卡密
利用JDBC Util分别测试其中的功能
package org.myserver.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.junit.Test;
public class SqlServerUtil {
private static String url = "jdbc:sqlserver://localhost:1433;DatabaseName=MyApp";
private static String user="sa";
private static String password="accp";
public static Connection getConnection ()throws Exception{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection conn = DriverManager.getConnection(url, user, password);
if(conn!=null) {System.out.println("连接到数据库成功~");}
return conn;
}
public static void close(Connection conn,Statement stat ,ResultSet rs) {
if(rs!=null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally{
rs = null;
}
}
if(stat != null){
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
} finally{
stat = null;
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} finally{
conn = null;
}
}
}
}
猜游戏版制/写卡到数据库
package org.myserver.util;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
import org.junit.Test;
public class TestCard {
@Test
public void testDoCard() throws Exception {
//用户注册时先判断卡密首字母,然后才会在数据库中找这张卡
System.out.println("选择要做的卡类型");
System.out.println("1----周卡");
System.out.println("2----月卡");
System.out.println("3----年卡");
int scan=new Scanner(System.in).nextInt();
switch (scan) {
case 1:
doCard("W","周卡");
break;
case 2:
doCard("M","月卡");
break;
case 3:
doCard("Y","年卡");
break;
default:System.out.println("输入有误");
}
}
private static void doCard(String string, String string2) throws Exception {
Connection con = SqlServerUtil.getConnection();
Statement sta = con.createStatement();
String a=string;
String type=string2;
System.out.println("请输入需要的"+type+"数量");
int sum = new Scanner(System.in).nextInt();
String[] suiji = new String[] { "A", "B", "C", "D", "E", "F",
"G", "H", "I", "G", "K", "L", "M", "N", "O", "P", "Q",
"R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
String[] num = new String[31];
Random example = new Random();
int count2=0;
for (int i = 0; i < sum; i++){
for (int j = 0; j < 31; j++) {
int number = example.nextInt(26);
num[j]=suiji[number];}
String s = a + num[0] + num[1] + num[2] + num[3] + num[4]
+ num[5] + num[6] + num[7] + num[8] + num[9] + num[10] +
num[11] + num[12] + num[13] + num[14] + num[15] + num[16] +
num[17] + num[18] + num[19] + num[20] + num[21] + num[22] +
num[23] + num[24] + num[25] + num[26] + num[27] + num[28] + num[29]+ num[30];
String addSql=null;
if(a.equals("Y"))addSql = "insert into nianka(nianka)values('"+s+"')";
if(a.equals("W"))addSql = "insert into zhouka(zhouka)values('"+s+"')";
if(a.equals("M"))addSql = "insert into yueka(yueka)values('"+s+"')";
sta.executeUpdate(addSql);
con.commit();
}
System.out.println("添加"+type+"成功!--------共添加"+sum+"张");
String querySql=null;
if(a.equals("Y"))querySql = "select * from NianKa";
if(a.equals("W"))querySql = "select * from ZhouKa";
if(a.equals("M"))querySql = "select * from YueKa";
//创建SQL语句
PreparedStatement ps = con.prepareStatement(querySql);
ResultSet rs = ps.executeQuery();
int count=0;
while(rs.next()) {
ArrayList list = new ArrayList();
list.add(rs.getString(1));
list.add(rs.getInt("state"));
System.out.println(list);
count++;
}
System.out.println("共查询到--------"+count+"张"+type);
SqlServerUtil.close(con, ps, rs);
}
}
测试结果。。。
创建一个表格
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |