包含KTRROTEX125连接器AFN 的词条

本文目录一览:

大人物一般出生在几月,大人物一般出生在几月

提起大人物一般出生在几月,大家都知道,有人问大人物一般出生在几月,另外,还有人想问哪些大人物的生日是3月2日,你知道这是怎么回事?其实历史上3月16日都有哪些大人物出生,下面就一起来看看大人物一般出生在几月,希望能够帮助到大家!

大人物一般出生在几月

1、大人物一般出生在几月:大人物一般出生在几月

有权有势的生日尾数。

2、大人物一般出生在几月:哪些大人物的生日是3月2日

3、大人物一般出生在几月:历史上3月16日都有哪些大人物出生

大人物的出生时辰。

4、大人物一般出生在几月:哪些大人物生日是8月13日?

生日在8月13日的人应该会有很多的。一年就只有天。每天都有很多个人出生,每一秒都有很多人出生,所以,8月13日出生的名会有很多。家里出伟人的征兆。

这个的话说实话8月13日大人物的生日这个不好说啊,要看你是从哪方面来分析了如果解决了的话请给个赞和采纳,谢谢。

徐骝良、李宗仁、何增禄、潘光旦等

历史上3月16日都有哪些大人物出生 5、大人物一般出生在几月:历史上哪些是12月18出生的大人物 6、大人物一般出生在几月:历史上哪些大人物是虎年几月份出生的

您好,我所知道的属虎的名人。

秦始皇(公元前年–前年)。公元前生于周赧王五十六年,壬寅年出生,属虎

天文学家张衡(公元78年–年他的生年是汉章帝建初三年,农历戊寅年出生,属虎

医李时珍(公元–年)明正德十三年,农历戊寅年出生虎

魏源(–年)原名远达,字默深,湖南邰阳金滩人。”师夷之长技以制夷”说这句话的就是清代学者、思想家、爱国者魏源。出生于清乾隆五十九年甲寅年出生虎

(–年)名文,字逸,号明德,广东香山翠享村人。丙寅年出生虎

7、大人物一般出生在几月:大人物出生的时候有什么迹象

大人物出生的时候一般没有人认为其以后能成为大人物的孩子几月出生。

大人物出生的时候让医生拍一下就哭

当时在场的人现在已经都死掉了你的问题看来没有答案了

8、大人物一般出生在几月:一般说大人物出生的时候的吉兆有哪些?

有梦境吉祥的;有通过母亲在怀孕时显异相;有奇花异草里;有家中来财宝里;有吉祥鸟来歌唱里;有地显异相;有天空有美丽的音乐的;凤凰命的女人百年难遇。

9、大人物一般出生在几月:鼠年出生的大人物都有哪些? 10、大人物一般出生在几月:十二属相出生方几月

属蛇的几月出生**:3、4、5、6、7月出生好

属蛇人生于三月,聪明颖悟,博学多才,有理想,有抱负,做事灵活机智,善于应变,虽出身贫寒,但能白手起家成名,成为**栋梁之材,为国为民担当大任,做出显著成绩。名播四方,利达三江。生于这个月的蛇人,算是有福之人,更算是自力更生,白手起家的楷模。预示家有大人物的征兆。

属蛇人生于四月,算是人间大富大贵之人,为人智谋双全,谋略才华过人,能得贵人帮助。读书能过目不忘。真是聪颖到极点。此月生蛇人,为大权在握,学艺能天下闻名。又有一副侠义心肠,又有大理想,大抱负,又能心想事成。

属蛇人生于五月,为人聪明机智过人,胆识过人,又有坚强意志,博学多才,有哲人的头脑,有先见之明。最能审时度势,更能抓住机遇。这月生蛇人,能得贵人帮助。一生平安。强大,威震四方。长大能孩子的。

属蛇人生于六月,是德望权盛福厚的大富大贵之人,这月生蛇人,满腹诗书,有很高的道德水平,在外能得到完人崇敬,在家能得父母和夫妻的爱慕支持,夫荣妻贵,子孙显赫,其对人诚恳忠厚,意志坚强,敢于战胜困难,能与人很好合作,有很强的和指挥才能。这个月生的蛇人,是人类为官的楷模,也是人类最幸福,**人敬爱的大人物。

属蛇人生于七月,为人敏捷聪明过人,才华出众。每次考试都多名列前茅,还智勇双全,能在困境逆境中前进,直到取得胜利,在财源上,这个月生的蛇人,也极会经营,把生意做的火热,利润如江水般涌来,在道德上,其为人极为高尚,性格温和醇厚。对人诚恳忠厚,但这个月生的女人,祖业凋零,全靠自己的聪明智慧的头脑,开辟伟大的事业。

以上就是与大人物一般出生在几月相关内容,是关于大人物一般出生在几月的分享。看完大人物一般出生在几月后,希望这对大家有所帮助!

iOS 接口加密方法-ASE256和数字签名

//这是需要加密的字典,里面存储这需要上传的参数

NSMutableDictionary *bodyDict=[[NSMutableDictionary alloc] init];

[bodyDict setValue:@"80088202220"  forKey:@"phone"];

//这是需要配置的key,需要前后端统一配置

#define StrApiKey @"ios-to-panda"

#define StrSecretKey @"Z4Q5eE}{9Wk8h-P]j3D~$IH8Qo)~)L,c"

#define EncryptKey @"UfbFJ?}2G=WlAu}z`ilz'_^Tf8(3(yg"

1,接口加密首先需要加时间戳

    bodyDict = [self signature:bodyDict strApiKey:StrApiKeystrSecretKey:StrSecretKey];

//数字签名

-(NSMutableDictionary*)signature:(NSMutableDictionary*)bodyDict strApiKey:(NSString*)strApiKey strSecretKey:(NSString*)strSecretKey{

    //时间戳

    NSString*time  = [NSStringstringWithFormat:@"%ld",[selfgetTimeSp]];

    [bodyDictsetObject:[NSStringgenmd5:time]forKey:@"nonce"];

    [bodyDictsetObject:timeforKey:@"time_stamp"];

    //升序排序

    NSArray*keyArray = [bodyDictallKeys];

    // 利用block进行排序

    NSArray*sortkeyArray = [keyArraysortedArrayUsingComparator:^NSComparisonResult(id  _Nonnullobj1,id  _Nonnullobj2) {

        NSComparisonResultresult = [obj1compare:obj2];

        returnresult;

    }];

    inti=0;

    NSString*strBaseString =@"";

    //生成Base String

    for(NSString* paraminsortkeyArray) {

        NSString*key;

        if([UserShareMgrisUserString:paramCompare:@"city_name"]) {//如果其中有中文需要转码

            key =  [[DataRequestshareInstance]urlEncode:[bodyDictobjectForKey:[NSStringstringWithFormat:@"%@",param]]];

        }else{

            key =  [bodyDictobjectForKey:[NSStringstringWithFormat:@"%@",param]];

        }

        if(0==i) {

            strBaseString = [NSStringstringWithFormat:@"%@=%@",param,key];

            i++;

        }else{

            strBaseString = [NSStringstringWithFormat:@"%@%@=%@",strBaseString,param,key];

        }

    }

    //生成签名

    NSString*sign = [selfhmacSha1:strBaseString :strSecretKey];

    [bodyDictsetObject:signforKey:@"sign"];

    returnbodyDict;

}

//hmacsga1加密

- (NSString*)hmacSha1:(NSString*)public_key :(NSString*)private_key{

    NSData* secretData = [private_key dataUsingEncoding:NSUTF8StringEncoding];

    NSData* stringData = [public_key dataUsingEncoding:NSUTF8StringEncoding];

    constvoid* keyBytes = [secretDatabytes];

    constvoid* dataBytes = [stringDatabytes];

    ///#define CC_SHA1_DIGEST_LENGTH  20          /* digest length in bytes */

    void* outs = malloc(CC_SHA1_DIGEST_LENGTH);

    CCHmac(kCCHmacAlgSHA1, keyBytes, [secretDatalength], dataBytes, [stringDatalength], outs);

    // Soluion 1

    NSData* signatureData = [NSData dataWithBytesNoCopy:outs length:CC_SHA1_DIGEST_LENGTH freeWhenDone:YES];

    NSString *body = [signatureData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];

    returnbody;

}

//获得当前时间戳

-(long)getTimeSp{

    longtime;

    NSDate*fromdate=[NSDatedate];

    time=(long)[fromdatetimeIntervalSince1970];

    returntime;

}

//md5加密方法,直接引用三方库的更好

+ (NSString*)genmd5:(NSString*)str

{

constchar*cStr = [strUTF8String];

unsignedcharresult[16];

CC_MD5( cStr,strlen(cStr), result );

return [NSString stringWithFormat:

@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",

result[0], result[1], result[2], result[3], 

result[4], result[5], result[6], result[7],

result[8], result[9], result[10], result[11],

result[12], result[13], result[14], result[15]];

}

2,进行ase256加密

//将数字签名后的字典转换成data

    NSError*parseError =nil;

    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:bodyDict options:NSJSONWritingPrettyPrinted error:parseError];

//将data转成字符串

    NSString *bodyString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

//将字符串转成data,至于这里为什么转2次,是因为不转码的话 php解析不了

    NSData *dataTake = [bodyString dataUsingEncoding:NSUTF8StringEncoding];

    //进行ase256加密

    dataTake = [self AES256Encrypt:dataTake WithKey:EncryptKey];

//将data转换成字符串

    NSString *body = [dataTake base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];

//AES256加密

- (NSData*)AES256Encrypt:(NSData*)Data WithKey:(NSString*)key  //加密

{

    CCCryptorRefcryptor =NULL;

    CCCryptorStatusstatus =kCCSuccess;

    idiv =nil;

    NSParameterAssert([key isKindOfClass: [NSData class]] || [key isKindOfClass: [NSString class]]);

    NSParameterAssert(iv ==nil|| [iv isKindOfClass: [NSData class]] || [iv isKindOfClass: [NSString class]]);

    NSMutableData* keyData, * ivData;

    keyData = [(NSMutableData *)[self SHA256Hash:[key dataUsingEncoding:NSUTF8StringEncoding]] mutableCopy];

    if( [ivisKindOfClass: [NSStringclass]] )

        ivData = [[ivdataUsingEncoding: NSUTF8StringEncoding] mutableCopy];

    else

        ivData = (NSMutableData*) [ivmutableCopy]; // data or nil

    // ensure correct lengths for key and iv data, based on algorithms

    NSUIntegerkeyLength = [keyDatalength];

    if( keyLength 16){

        [keyDatasetLength:16];

    }elseif( keyLength 24){

        [keyDatasetLength:24];

    }else{

        [keyDatasetLength:32];

    }

    [ivDatasetLength: [keyDatalength]];

    status =CCCryptorCreate( kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,

                             [keyDatabytes], [keyDatalength], [ivDatabytes],

                             cryptor );

    if( status ==kCCSuccess)

    {

        NSData* result = [self_runData:(NSData*)DataCryptor: cryptorresult: status];

        CCCryptorRelease( cryptor );

        returnresult;

    }

    return nil;

}

- (NSData*) SHA256Hash:(NSData*)data

{

    unsigned char hash[CC_SHA256_DIGEST_LENGTH];

    (void)CC_SHA256( [databytes], (CC_LONG)[datalength], hash );

    return ( [NSData dataWithBytes: hash length: CC_SHA256_DIGEST_LENGTH] );

}

- (NSData*) _runData:(NSData*)keyData Cryptor: (CCCryptorRef) cryptor result: (CCCryptorStatus*) status

{

    size_tbufsize =CCCryptorGetOutputLength( cryptor, (size_t)[keyDatalength],true);

    void* buf =malloc( bufsize );

    size_tbufused =0;

    size_tbytesTotal =0;

    *status =CCCryptorUpdate( cryptor, [keyDatabytes], (size_t)[keyDatalength],

                              buf, bufsize, bufused );

    if( *status !=kCCSuccess)

    {

        free( buf );

        return(nil);

    }

    bytesTotal += bufused;

    // From Brent Royal-Gordon (Twitter: architechies):

    //  Need to update buf ptr past used bytes when calling CCCryptorFinal()

    *status =CCCryptorFinal( cryptor, buf + bufused, bufsize - bufused, bufused );

    if( *status !=kCCSuccess)

    {

        free( buf );

        return(nil);

    }

    bytesTotal += bufused;

    return( [NSDatadataWithBytesNoCopy: buflength: bytesTotal] );

}

3,这样就可以使用afn进行上传了

    NSMutableDictionary *paramDict=[[NSMutableDictionary alloc] init];

    [paramDictsetValue:bodyforKey:@"data"];

iOS中的HTTPS认证

iOS 中会话认证机制共有四种,大体分为两种类型:

枚举类如下:

说明:

HTTPS 通信中一般都是单向认证,这样可以保证数据的加密传输,也能够防止没有证书的钓鱼网站。而双向认证一般用于企业来禁止接口被第三方调用和解析。iOS 中的 NSURLSession 的默认实现、AFN 的默认实现都是单向认证,此时代理方法只会受到一种类型的回调,即: NSURLAuthenticationMethodServerTrust 。

双向认证建立在单向认证的基础上,需要自己去额外实现:

双向认证中代理方法会收到两个类型的回调:

与会话层面的认证机制相对的是特殊任务认证机制:

这些枚举的意义是???(见后文)

TLS (Transport Layer Security)就是 SSL(Secure Socket Layer),只不过版本不同而已:

SSL 和 HTTPS 的概念等不再赘述;

HTTPS 中的单向认证流程图如下:

其具体的流程为:

简化版流程图如下:

一般的 HTTPS 请求都采用单向认证,只有极少数对安全性要求很高的企业采用双向认证如金融企业,或者是企业对涉及到核心业务的接口采用双向认证;

单向认证中客户端认证服务端证书的特性就决定了,只要客户端愿意且服务端的证书正常,那么任意客户端都可以访问该服务器;

双向认证中,除了客户端对服务端进行认证,服务端还要对客户端进行认证。因此,服务端对客户端证书的认证逻辑就决定了客户端是被动的,能否访问该服务器完全由服务端决定。有的服务端只是单纯的对客户端证书进行 CA 认证,还有的会对证书的主体进行认证,非白名单内的主体不允许访问服务器;

NTLM 和 Kerberos 用于早期的 Windows 中,本文不做过多了解:

双向认证和白名单有这相同的作用,就是服务端限制某些客户端的访问,白名单机制的存在有这更方面成熟的实现机制,可能这就是双向认证不常用的原因?

是指使用某种算法计算出元数据的哈希值,以此确保元数据没有被篡改,最初的签名算法采用摘要算法,证书体系中的签名采用摘要算法+ 非对称加密的方式进行签名;

因为黑客可以修改元数据的同时修改摘要算法得出的哈希值,所以出现了证书,其目的是通过非对称加密来保证元数据的哈希值不被破解;

证书分为 TBSCertificate(To-Be-Signed) 和 Certificate,即待签名的证书和签名过的证书。TBSCertificate 证书中包含拥有者的各种信息,同时还包含拥有者的公钥。我们一般说的证书是经过签名的,这种证书中除了包含 TBSCertificate ,还会包含签名使用的算法、签名值;

非对称加密效率较低,所以证书的签名一般先对 TBSCertificate 使用摘要算法得到固定长度的哈希值,然后使用私钥对这个哈希值进行非对称加密,最终得到签名,所以证书体系中的签名已经不是单纯的摘要算法了;

最初的证书是自签名证书,拥有者使用自己的私钥对 TBSCertificate 进行签名,如果黑客攻击了证书发送者,并将证书上的公钥替换为自己的公钥,甚至直接将拥有者的私钥给窃取或者替换,那么接收者接收到的也是被篡改过的数据;

自签名证书中,私人的私钥安全性隐患很大,因此才有了权威的 CA 机构,证书体系中默认 CA 机构的安全性不会被破解,所以理论上 CA 的私钥不会被窃取。CA 机构会对个人信息进行验证,并且使用自己的私钥对 TBSCertificate 证书进行签名之后颁发给申请者;

CA 机构的私钥理论上绝对安全,公钥会被嵌入到计算机基础体系中,如被嵌入到操作系统、浏览器中,所以浏览器可以直接使用 CA 的公钥对证书进行验签;

验签的流程就是先提取签名时使用的签名算法(signatureAlgorithm),这里主要是要知道签名时摘要算法采用的哪一种。然后提取出 TBSCertificate,使用摘要算法对 TBSCertificate 进行哈希,得到 Hash1。接着,使用 CA 公钥对签名值(signatureValue)进行解密,得到 Hash2,如果 Hash1 = Hash2,则证书校验成功;

至此,CA + 非对称加密 + 摘要算法就组成了证书体系;

Root CA 基本上就那几个,他们的公钥会被嵌入到计算机基础体系中。如果直接使用 Root CA 的公钥进行签发,那么一旦 Root CA 的私钥发生变化,如撤销、过期等,牵连范围极大。

所以 intermediate CA 出现了, intermediate CA 作为 Root CA 的代理,先向 Root CA 申请证书,其流程和上面的基本一致, intermediate CA 将自己的信息和公钥发送给 Root CA ,Root CA 验证信息后颁发 TBSCertificate 并使用自己的私钥进行签名,最后颁发给 intermediate CA;

Root CA 只对 intermediate CA 颁发证书, intermediate CA 使用自己的私钥对申请者的证书进行签名,这样就实现了代理的作用;

一张图做总结:

首先,三个随机数的正常使用流程如下:

最终客户端和服务端都有三个随机数,然后根据三个随机数使用协议中的算法计算出一个 master_random,后续都使用 master_random 对报文进行对称加密之后传输;

这里有几个重点:

要回答这两个问题,这里就涉及到 HTTPS 中计算对称加密最终 key 的两种算法:

如果只是用一个随机数,这个随机数由客户端生成之后,使用 RSA 加密之后传送给服务端,服务端和客户端都是用这个随机数作为对称加密的 key 进行对称加密,这种情况有两个问题:

流程如下:

HTTPS 中的 RSA 加密,通过 premaster_random 这一个随机数来计算 master_random 的算法就是只使用一个随机数,并且使用 RSA 加密传输。

这种算法存在上述两个问题,因此,开发出了 DH 算法,现在 HTTPS 一般通过 DH 算法计算最后的 master_random;

很显然,除非中间人攻击,即便知道g、p,窃取到X1、X2,也很那倒推出来P1、P2,也就没法计算出最后密钥。

流程如下:

DH 算法原理:

如果不清楚上面的计算原理,只需要知道 DH 算法通过 3 个随机数来计算最终的 master_random 作为对称加密的 key,解决了伪随机数不一定随机的问题,还解决了 RSA 加密的向前攻击的问题;

为什么需要三个随机数,总结:

附-破解 HTTPS 的三种方法:

TCP报文格式:

序号:seq,用来标识从TCP源端向目的端发送的字节流。tcp中传输数据时,会把数据中的每个字节用序号进行标志,确保数据按顺序传输

确认号:ack,小写的。只有ACK标志位为1时,确认序号字段才有效,ack=Seq+1。确认方Ack=发起方Req+1,无论哪一端的确认号都是如此。比如A向B发送建立连接的请求时,seq=x,B回复的报文中 ACK 标志位为1,且确认号就是ack=x+1,表示收到了序列号为x的报文。

标志位:表示报文的六种格式,为1时才有效,默认为0;注意,ACK是标志位,而ack是确认号。

(A)URG:紧急指针(urgent pointer)有效。

(B)ACK:确认序号有效。

(C)PSH:接收方应该尽快将这个报文交给应用层。

(D)RST:重置连接。

(E)SYN:发起一个新连接。

(F)FIN:释放一个连接。

四次分手:

完整的通信流程:

总结:网络存在延迟、丢失的情况,两次握手会导致服务端开启多个无效连接,进而导致服务端在传送数据但是客户端并没有连接上的情况,而四次握手又多余了。

总结:客户端请求断开连接时,server有可能存在未发送完毕的数据,这种特性导致server将ACK和FIN报文分开发送,所以就会出现比三次握手时多一次的报文,三次握手时,server将ACK和SYN合并发送了;

结果:客户端和服务端的 master_random 是相同的,后面都使用这个数字作为对称加密的 key 来对数据进行对称加密之后进行传输;

ATS,即 App Transport Security,ATS 默认情况下要求 App 所有的请求都使用 HTTPS 连接,且对 HTTPS 认证中的摘要算法版本、对称算法版本等进行要求。Apple 利用自己的强势地位推动了客户端的安全性。

如果不额外在 info.plist 中设置 ATS,那么就相当于开启 ATS。

此时,所有的连接/请求都会被 ATS 机制拦截并使用 ATS 中默认的设置来进行连接的认证和建立,符合 ATS 要求的请求才能够通过,否则会被拒绝,ATS 默认策略的检测包括且不限于:

最常用的两个设置就是 NSAllowsArbitraryLoads 和 NSAllowsArbitraryLoadsInWebContent 。两者组合时,会根据版本的不同(是否大于 iOS10)而有不同的表现。鉴于现在的 iOS9 版本已经很少了,可以直接使用 iOS10 的版本,两个设置的优先级: NSAllowsArbitraryLoadsInWebContent NSAllowsArbitraryLoads 。即设置了前者之后,后者会被忽略;

如果需要完全关闭 ATS,需要设置 NSAllowsArbitraryLoads = YES ,并且在提交审核时进行说明。

对于浏览器类 App,如果只是允许浏览器中使用非安全的请求(HTTP),那么只需要设置 NSAllowsArbitraryLoadsInWebContent = YES 即可。

另外,还可以使用 NSExceptionDomains 来设置允许 HTTP 请求的白名单域名,这种设置相对于直接关闭 ATS 更容易过审,使用如下:

可以直接使用该网站来检测所请求的域名是否符合 ATS 标准: ;port=443

如图:

综上,如果公司使用的证书是 CA 申请下来的,且服务器端支持的加密算法符合 ATS 的要求,那么无论是 NSURLSession 还是 AFNetworking,都是可以直接进行网络请求的,Apple 已经完成了 HTTPS 中客户端对服务器证书的验证操作,不需要开发者额外实现而且安全性能够得到保证。

所以,ATS 是 Apple 对客户端请求的安全标准和实现(封装);

此种模式下,App 需要验证证书的签名,步骤如下:

使用签名校验的方式有一个缺点:

而公钥验证可以规避掉这个缺点,起流程如下:

我们在制作证书密钥时,公钥在证书的续期前后都可以保持不变(即密钥对不变),所以可以避免证书有效期问题;

如果采用证书锁定方式(Certificate Mode),则获取证书的摘要 hash,以 infinisign.com 为例:

所以其中的 wLgBEAGmLltnXbK6pzpvPMeOCTKZ0QwrWGem6DkNf6o= 就是我们将要进行证书锁定的指纹 (Hash) 信息。

如果采用公钥锁定方式(PublicKey Mode),则获取证书公钥的摘要hash,以 infinisign.com 为例

所以其中的 bAExy9pPp0EnzjAlYn1bsSEGvqYi1shl1OOshfH3XDA= 就是我们将要进行证书锁定的指纹 (Hash) 信息。

见文章: AFN中的鉴权

对于容器而言,这样做是合理的,因为浏览器可能会访问不安全的网站;

疑问:

参考:

白寡妇是谁啊

萨曼莎·卢思韦特(Samantha

Lewthwaite),绰号“白寡妇”,是“基地”组织在东非的主要招募者之一和军事训练专家,伦敦爆炸事件犯罪嫌疑人弹杰曼·林赛的妻子。因负责培训及指挥女性学员制造自杀式炸弹,而被媒体称为“白寡妇”。她是索马里青年党的爆破专家,该组织的主要赞助人之一,并被肯尼亚警方,伦敦警察厅和美国中情局通缉。2013年9月23日,肯尼亚官员证实,萨曼莎·卢思韦特参与了首都内罗毕购物中心恐怖袭击案,并传出其被击毙的消息,但是英国官方在24日予以了否认。

函数项级数点点收敛与一致收敛的区别是什么?

从定义上看:\x0d\x0a\x0d\x0afn一致收敛到f:对于任意的e0,存在一个N0,使对于任意的x在定义域和nN, |f(x)-fn(x)|0,对于任意的x在定义域,存在一个N_x0,使任意的和nN_x, |f(x)-fn(x)|

回答于 2022-11-16

宏_笔记本电脑的小键盘怎么切换?

切换方法:\x0d\x0a按住Fn键后,点一下Num键即可把主键盘区右侧变成数字键。再按一次,即可切换回正常的字母键。\x0d\x0a\x0d\x0aFN键一般在左下角,Ctrl键旁边,Num键在右上角。