获取MAC地址以及MD5加密

public static String getLocalMacAddressFromIp(Context context){ String mac_s= ""; try { byte[] mac; NetworkInterface ne = NetworkInterface.getByInetAddress(InetAddress.getByName(getLocalIpAddress())); mac = ne.getHardwareAddress(); mac_s = byte2hex(mac); } catch (Exception e) { e.printStackTrace(); } return mac_s; }public static String byte2hex(byte[] b){ StringBuffer hs = new StringBuffer(b.length); String stmp = ""; int len = b.length; for (int n = 0; n < len; n++) { stmp = Integer.toHexString(b[n] & 0xFF); if(stmp.length() == 1){ hs = hs.append("0").append(stmp); }else { hs = hs.append(stmp); } } return String.valueOf(hs); }public static String getLocalIpAddress() { try { for (Enumeration en = NetworkInterface .getNetworkInterfaces(); en.hasMoreElements();) { NetworkInterface intf = en.nextElement(); for (Enumeration enumIpAddr = intf .getInetAddresses(); enumIpAddr.hasMoreElements();) { InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress()) { return inetAddress.getHostAddress().toString(); } } } } catch (SocketException ex) { Log.e("WifiPreference IpAddress", ex.toString()); } return null; } public static String getMD5(byte[] source) {String s = null;char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9','a', 'b', 'c', 'd', 'e', 'f' };// 用来将字节转换成16进制表示的字符try {java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");md.update(source);byte tmp[] = md.digest();// MD5 的计算结果是一个 128 位的长整数,// 用字节表示就是 16 个字节char str[] = new char[16 * 2];// 每个字节用 16 进制表示的话,使用两个字符, 所以表示成 16// 进制需要 32 个字符int k = 0;// 表示转换结果中对应的字符位置for (int i = 0; i < 16; i++) {// 从第一个字节开始,对 MD5 的每一个字节// 转换成 16// 进制字符的转换byte byte0 = tmp[i];// 取第 i 个字节str[k++] = hexDigits[byte0 >>> 4 & 0xf];// 取字节中高 4 位的数字转换,// >>>// 为逻辑右移,将符号位一起右移str[k++] = hexDigits[byte0 & 0xf];// 取字节中低 4 位的数字转换}s = new String(str);// 换后的结果转换为字符串} catch (NoSuchAlgorithmException e) {// TODO Auto-generated catch blocke.printStackTrace();}return s;}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很高兴为您解答这个问题。以下是一段用VS编写的登陆/注册程序,它可以读取CPU和网卡地址作为注册信息,并使用MD5格式加密: ```c++ #include <iostream> #include <string> #include <Windows.h> #include <iphlpapi.h> #include <winsock2.h> #include <openssl/md5.h> #pragma comment(lib, "iphlpapi.lib") #pragma comment(lib, "ws2_32.lib") using namespace std; string getCPUID() { string cpuID; __asm { mov eax, 0 cpuid mov cpuID, ebx mov cpuID, edx mov cpuID, ecx } return cpuID; } string getMACAddress() { PIP_ADAPTER_INFO pAdapterInfo; ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO); pAdapterInfo = (IP_ADAPTER_INFO*)malloc(sizeof(IP_ADAPTER_INFO)); if (pAdapterInfo == NULL) { return ""; } if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) { free(pAdapterInfo); pAdapterInfo = (IP_ADAPTER_INFO*)malloc(ulOutBufLen); if (pAdapterInfo == NULL) { return ""; } } if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == NO_ERROR) { string macAddress = pAdapterInfo->Address[0]; for (int i = 1; i < pAdapterInfo->AddressLength; i++) { macAddress += ":"; macAddress += pAdapterInfo->Address[i]; } free(pAdapterInfo); return macAddress; } free(pAdapterInfo); return ""; } string md5(string str) { unsigned char md[MD5_DIGEST_LENGTH]; MD5((unsigned char*)str.c_str(), str.length(), md); char buf[MD5_DIGEST_LENGTH * 2 + 1]; for (int i = 0; i < MD5_DIGEST_LENGTH; i++) { sprintf_s(buf + i * 2, 3, "%02x", md[i]); } return buf; } int main() { string username, password; cout << "请输入用户名:"; cin >> username; cout << "请输入密码:"; cin >> password; string cpuID = getCPUID(); string macAddress = getMACAddress(); string registrationInfo = cpuID + macAddress; string encryptedRegistrationInfo = md5(registrationInfo); cout << "用户名:" << username << endl; cout << "密码:" << password << endl; cout << "CPU ID:" << cpuID << endl; cout << "MAC地址:" << macAddress << endl; cout << "注册信息:" << registrationInfo << endl; cout << "加密后的注册信息:" << encryptedRegistrationInfo << endl; return 0; } ``` 这段代码可以获取CPU ID和MAC地址,并将它们组合成注册信息,然后使用MD5格式加密。请注意,这段代码只是一个示例,实际应用中需要更多的安全措施来保护用户的隐私和安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值