block session

本文介绍了使用SQL查询获取会话信息以及会话管理的方法,包括查询会话状态、ID和序列号,并演示了如何终止特定会话。
SYS@sales 2013-07-16 23:30:21> select username,blocking_session,blocking_session_status from v$session where blocking_session_status='VALID';

USERNAME               BLOCKING_SESSION BLOCKING_SE
------------------------------ ---------------- -----------
SCOTT                         97 VALID

SYS@sales 2013-07-16 23:30:21> select username,blocking_session,blocking_session_status from v$session where blocking_session_status='VALID';

USERNAME		       BLOCKING_SESSION BLOCKING_SE
------------------------------ ---------------- -----------
SCOTT					     97 VALID

SYS@sales 2013-07-16 23:42:01> select sid ,serial# from v$session where sid = 97;

       SID    SERIAL#
---------- ----------
	97	16976

SYS@sales 2013-07-16 23:42:55> alter system kill session '97,16976';

System altered.



以下是一个使用C语言实现基于DES的集中式密钥分配协议仿真的示例代码,该代码包含至少10个用户,支持任意两个用户之间的会话,会话内容以.txt文件格式传输,同时会输出每一步所传递的信息和解密后的信息,并比较正式会话过程中解密后的明文信息同原来的会话文件是否一致。 ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <openssl/des.h> #define NUM_USERS 10 #define KEY_SIZE 8 #define BLOCK_SIZE 8 // 模拟KDC typedef struct { DES_cblock master_keys[NUM_USERS]; } KDC; // 初始化KDC void init_kdc(KDC *kdc) { for (int i = 0; i < NUM_USERS; i++) { for (int j = 0; j < KEY_SIZE; j++) { kdc->master_keys[i][j] = (unsigned char)i + j; } } } // 生成会话密钥 void generate_session_key(DES_cblock *session_key) { for (int i = 0; i < KEY_SIZE; i++) { (*session_key)[i] = rand() % 256; } } // DES加密 void des_encrypt(DES_cblock *key, unsigned char *plaintext, unsigned char *ciphertext) { DES_key_schedule schedule; DES_set_key(key, &schedule); DES_ecb_encrypt((DES_cblock *)plaintext, (DES_cblock *)ciphertext, &schedule, DES_ENCRYPT); } // DES解密 void des_decrypt(DES_cblock *key, unsigned char *ciphertext, unsigned char *plaintext) { DES_key_schedule schedule; DES_set_key(key, &schedule); DES_ecb_encrypt((DES_cblock *)ciphertext, (DES_cblock *)plaintext, &schedule, DES_DECRYPT); } // 分配会话密钥 void distribute_key(KDC *kdc, int user1, int user2, DES_cblock *encrypted_key1, DES_cblock *encrypted_key2) { DES_cblock session_key; generate_session_key(&session_key); des_encrypt(&kdc->master_keys[user1], (unsigned char *)&session_key, (unsigned char *)encrypted_key1); des_encrypt(&kdc->master_keys[user2], (unsigned char *)&session_key, (unsigned char *)encrypted_key2); } // 读取文件内容 void read_file(const char *filename, unsigned char **data, size_t *size) { FILE *file = fopen(filename, "rb"); if (file == NULL) { perror("Failed to open file"); exit(1); } fseek(file, 0, SEEK_END); *size = ftell(file); fseek(file, 0, SEEK_SET); *data = (unsigned char *)malloc(*size); fread(*data, 1, *size, file); fclose(file); } // 写入文件内容 void write_file(const char *filename, unsigned char *data, size_t size) { FILE *file = fopen(filename, "wb"); if (file == NULL) { perror("Failed to open file"); exit(1); } fwrite(data, 1, size, file); fclose(file); } // 比较文件内容 int compare_files(const char *file1, const char *file2) { unsigned char *data1, *data2; size_t size1, size2; read_file(file1, &data1, &size1); read_file(file2, &data2, &size2); if (size1 != size2) { free(data1); free(data2); return 0; } int result = memcmp(data1, data2, size1); free(data1); free(data2); return result == 0; } int main() { KDC kdc; init_kdc(&kdc); int user1 = 0; int user2 = 1; DES_cblock encrypted_key1, encrypted_key2; distribute_key(&kdc, user1, user2, &encrypted_key1, &encrypted_key2); printf("Encrypted key for user %d: ", user1); for (int i = 0; i < KEY_SIZE; i++) { printf("%02x ", encrypted_key1[i]); } printf("\n"); printf("Encrypted key for user %d: ", user2); for (int i = 0; i < KEY_SIZE; i++) { printf("%02x ", encrypted_key2[i]); } printf("\n"); DES_cblock session_key1, session_key2; des_decrypt(&kdc->master_keys[user1], (unsigned char *)&encrypted_key1, (unsigned char *)&session_key1); des_decrypt(&kdc->master_keys[user2], (unsigned char *)&encrypted_key2, (unsigned char *)&session_key2); printf("Decrypted session key for user %d: ", user1); for (int i = 0; i < KEY_SIZE; i++) { printf("%02x ", session_key1[i]); } printf("\n"); printf("Decrypted session key for user %d: ", user2); for (int i = 0; i < KEY_SIZE; i++) { printf("%02x ", session_key2[i]); } printf("\n"); // 读取会话文件 unsigned char *plaintext; size_t plaintext_size; read_file("session.txt", &plaintext, &plaintext_size); // 加密会话内容 size_t num_blocks = (plaintext_size + BLOCK_SIZE - 1) / BLOCK_SIZE; unsigned char *ciphertext = (unsigned char *)malloc(num_blocks * BLOCK_SIZE); for (size_t i = 0; i < num_blocks; i++) { des_encrypt(&session_key1, plaintext + i * BLOCK_SIZE, ciphertext + i * BLOCK_SIZE); } // 输出加密后的内容 printf("Encrypted session content: "); for (size_t i = 0; i < num_blocks * BLOCK_SIZE; i++) { printf("%02x ", ciphertext[i]); } printf("\n"); // 解密会话内容 unsigned char *decrypted_text = (unsigned char *)malloc(num_blocks * BLOCK_SIZE); for (size_t i = 0; i < num_blocks; i++) { des_decrypt(&session_key2, ciphertext + i * BLOCK_SIZE, decrypted_text + i * BLOCK_SIZE); } // 输出解密后的内容 printf("Decrypted session content: "); for (size_t i = 0; i < plaintext_size; i++) { printf("%c", decrypted_text[i]); } printf("\n"); // 写入解密后的内容到文件 write_file("decrypted_session.txt", decrypted_text, plaintext_size); // 比较文件内容 if (
最新发布
11-05
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值