通常c库中提供字符串查找函数strstr,但是有时候需要从字符串末尾倒序查找指定字符串,我在学习邮件透明加密时,用到此函数,现在分享一下。
//倒序查找字符串
//使用方法同系统自带的一样,n是s2的有效长度减一
u_char* ngx_strlcasestrn_r(ngx_event_t *ev,u_char *s1, u_char *last, u_char *s2, size_t n){
ngx_uint_t c1, c2;
u_char *ptmp = NULL;
c2 = (ngx_uint_t)*s2++;
c2 = (c2 >= 'A' && c2 <= 'Z') ? (c2 | 0x20) : c2;
ptmp = last - n - 1;
do {
do {
if (ptmp < s1) {
return NULL;
}
c1 = (ngx_uint_t) *ptmp--;
c1 = (c1 >= 'A' && c1 <= 'Z') ? (c1 | 0x20) : c1;
} while (c1 != c2);
} while (ngx_strncasecmp(ptmp + 2, s2, n) != 0);
return ptmp + 1;
}
ngx_int_t
ngx_strncasecmp(u_char *s1, u_char *s2, size_t n)
{
ngx_uint_t c1, c2;
while (n) {
c1 = (ngx_uint_t) *s1++;
c2 = (ngx_uint_t) *s2++;
c1 = (c1 >= 'A' && c1 <= 'Z') ? (c1 | 0x20) : c1;
c2 = (c2 >= 'A' && c2 <= 'Z') ? (c2 | 0x20) : c2;
if (c1 == c2) {
if (c1) {
n--;
continue;
}
return 0;
}
return c1 - c2;
}
return 0;
}
最后介绍一下邮件透明加密。目前很多邮件明文存储在服务器上很不安全,但某些邮件加密产品部署麻烦,需要用到更改账户名等等。而透明加密除了可以加密邮件,不需要用户去更改使用习惯,部署非常方便。其中天御云安的隐密邮,在透明加密方面做的很好。网址是:https://mail.tyyunan.com/
关键字:c 倒序 字符串 透明加密