LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 6459|回复: 13

pidgin密码居然是明文保存

[复制链接]
发表于 2009-1-21 19:42:28 | 显示全部楼层 |阅读模式
以前只知道保存的日志是明文的
才知道保存的密码也是明文,我火星了
有没有加密的插件?
发表于 2009-1-21 21:33:16 | 显示全部楼层
真是明文,我XXXXXXX。
回复 支持 反对

使用道具 举报

发表于 2009-9-23 10:02:45 | 显示全部楼层
很简单的道理,若是单向散列,就不可能拿记住的密码来登录了;如果仅仅是加密解密,那有人想破解你加密的密码明文同样易如反掌。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-3 11:20:14 | 显示全部楼层
也可以只保存密码的MD5或SHA1,和用户输入字符串的校验值比较么
回复 支持 反对

使用道具 举报

发表于 2009-12-4 14:57:47 | 显示全部楼层
你还怕啥……谁在linux 下盗号?
回复 支持 反对

使用道具 举报

发表于 2009-12-5 00:48:35 | 显示全部楼层
除了Pidgin,明文保存口令的程序不少。有些还可能涉及关键应用,比如pgadminIII。如果允许我不保存口令,也还算可用。要是明文保存口令又不提供不保存的选项,那这程序设计得就有点脑残了。当然,如果能做到像linux系统那样的口令管理程度就比较理想了。
回复 支持 反对

使用道具 举报

发表于 2010-4-5 12:00:23 | 显示全部楼层
Post by swicol;2051960
也可以只保存密码的MD5或SHA1,和用户输入字符串的校验值比较么
这样就不能自动登录了
回复 支持 反对

使用道具 举报

发表于 2010-4-5 12:01:34 | 显示全部楼层
Post by Jockey;2029373
很简单的道理,若是单向散列,就不可能拿记住的密码来登录了;如果仅仅是加密解密,那有人想破解你加密的密码明文同样易如反掌。
可以用salt加密,会好一点儿
回复 支持 反对

使用道具 举报

发表于 2010-4-5 19:49:45 | 显示全部楼层
Post by swicol;1940454
以前只知道保存的日志是明文的
才知道保存的密码也是明文,我火星了
有没有加密的插件?


有, 但非插件
回复 支持 反对

使用道具 举报

发表于 2010-4-5 22:54:00 | 显示全部楼层
可以利用gnome-keyring,这是补丁。arch的AUR里面找的


  1. --- configure.ac
  2. +++ configure.ac
  3. @@ -2267,6 +2267,20 @@
  4.         LDFLAGS="$orig_LDFLAGS"
  5. fi

  6. +dnl #######################################################################
  7. +dnl # Check for gnome-keyring
  8. +dnl #--enable-gnome-keyring=(yes|no)
  9. +dnl #######################################################################
  10. +AC_ARG_ENABLE(gnome-keyring,
  11. +              AC_HELP_STRING([--enable-gnome-keyring],
  12. +                             [use gnome keyring for storing password [default=no]]),,
  13. +              enable_gnome_keyring=no)
  14. +if test "x$enable_gnome_keyring" = "xyes"; then
  15. +    PKG_CHECK_MODULES(GAIM_KEYRING,
  16. +                      gnome-keyring-1,
  17. +                      AC_DEFINE(GAIM_ENABLE_KEYRING, [], [Set if we should use gnome-keyring]))
  18. +fi
  19. +
  20. AC_MSG_CHECKING(for me pot o' gold)
  21. AC_MSG_RESULT(no)
  22. AC_CHECK_FUNCS(gethostid lrand48)
  23. --- libpurple/Makefile.am
  24. +++ libpurple/Makefile.am
  25. @@ -246,6 +246,7 @@
  26.         $(DBUS_LIBS) \
  27.         $(GLIB_LIBS) \
  28.         $(LIBXML_LIBS) \
  29. +        $(GAIM_KEYRING_LIBS) \
  30.         $(NETWORKMANAGER_LIBS) \
  31.         $(INTLLIBS) \
  32.         -lm
  33. @@ -259,6 +260,7 @@
  34.         $(GLIB_CFLAGS) \
  35.         $(DEBUG_CFLAGS) \
  36.         $(DBUS_CFLAGS) \
  37. +        $(GAIM_KEYRING_CFLAGS) \
  38.         $(LIBXML_CFLAGS) \
  39.         $(NETWORKMANAGER_CFLAGS)

  40. --- libpurple/account.c
  41. +++ libpurple/account.c
  42. @@ -49,6 +49,13 @@
  43. #define PURPLE_ACCOUNT_GET_PRIVATE(account) \
  44.         ((PurpleAccountPrivate *) (account->priv))

  45. +#ifdef GAIM_ENABLE_KEYRING
  46. +#include <gnome-keyring.h>
  47. +
  48. +static char * gaim_account_get_password_from_keyring (const char *_prpl, const char *_user);
  49. +static gboolean gaim_account_set_password_in_keyring (const char *_prpl, const char *_user, const char *password);
  50. +#endif
  51. +
  52. /* TODO: Should use PurpleValue instead of this?  What about "ui"? */
  53. typedef struct
  54. {
  55. @@ -380,8 +387,13 @@
  56.         if (purple_account_get_remember_password(account) &&
  57.                 ((tmp = purple_account_get_password(account)) != NULL))
  58.         {
  59. +#ifdef GAIM_ENABLE_KEYRING
  60. +                gaim_account_set_password_in_keyring( purple_account_get_protocol_id(account),
  61. +                                          purple_account_get_username(account), tmp);
  62. +#else
  63.                 child = xmlnode_new_child(node, "password");
  64.                 xmlnode_insert_data(child, tmp, -1);
  65. +#endif
  66.         }

  67.         if ((tmp = purple_account_get_alias(account)) != NULL)
  68. @@ -796,17 +808,30 @@
  69.         }

  70.         ret = purple_account_new(name, _purple_oscar_convert(name, protocol_id)); /* XXX: */
  71. -        g_free(name);
  72. -        g_free(protocol_id);
  73. -
  74. -        /* Read the password */
  75. -        child = xmlnode_get_child(node, "password");
  76. -        if ((child != NULL) && ((data = xmlnode_get_data(child)) != NULL))
  77. -        {
  78. -                purple_account_set_remember_password(ret, TRUE);
  79. -                purple_account_set_password(ret, data);
  80. -                g_free(data);
  81. -        }
  82. +        gboolean got_pwd = FALSE;
  83. +#ifdef GAIM_ENABLE_KEYRING
  84. +        data = gaim_account_get_password_from_keyring(protocol_id, name);
  85. +        if (data)
  86. +        {
  87. +                got_pwd = TRUE;
  88. +                purple_account_set_remember_password(ret, TRUE);
  89. +                purple_account_set_password(ret, data);
  90. +                g_free(data);
  91. +        }
  92. +#endif
  93. +        if (!got_pwd)
  94. +        {
  95. +                /* Read the password */
  96. +                child = xmlnode_get_child(node, "password");
  97. +                if ((child != NULL) && ((data = xmlnode_get_data(child)) != NULL))
  98. +                {
  99. +                        purple_account_set_remember_password(ret, TRUE);
  100. +                        purple_account_set_password(ret, data);
  101. +                        g_free(data);
  102. +                }
  103. +        }
  104. +        g_free(name);
  105. +        g_free(protocol_id);

  106.         /* Read the alias */
  107.         child = xmlnode_get_child(node, "alias");
  108. @@ -2797,3 +2822,65 @@
  109.         purple_signals_disconnect_by_handle(handle);
  110.         purple_signals_unregister_by_instance(handle);
  111. }
  112. +
  113. +#ifdef GAIM_ENABLE_KEYRING
  114. +static char *
  115. +gaim_account_get_password_from_keyring(const char *_prpl, const char *_user)
  116. +{
  117. +  GnomeKeyringNetworkPasswordData *found_item;
  118. +  GnomeKeyringResult               result;
  119. +  GList                           *matches;
  120. +  char                            *password;
  121. +
  122. +  matches = NULL;
  123. +
  124. +  result = gnome_keyring_find_network_password_sync (
  125. +               _user,          /* user     */
  126. +               NULL,           /* domain   */
  127. +               "gaim.local",   /* server   */
  128. +               NULL,           /* object   */
  129. +               _prpl,          /* protocol */
  130. +               NULL,           /* authtype */
  131. +               1863,           /* port     */
  132. +               &matches);
  133. +
  134. +  if (result != GNOME_KEYRING_RESULT_OK)
  135. +    return NULL;
  136. +
  137. +  if (matches == NULL || matches->data == NULL)
  138. +    return NULL;
  139. +
  140. +  found_item = (GnomeKeyringNetworkPasswordData *) matches->data;
  141. +
  142. +  password = g_strdup (found_item->password);
  143. +
  144. +  gnome_keyring_network_password_list_free (matches);
  145. +
  146. +  return password;
  147. +}
  148. +
  149. +void my_GnomeKeyringOperationGetIntCallback(GnomeKeyringResult result, guint32 val, gpointer data)
  150. +{
  151. +  return;
  152. +}
  153. +
  154. +static gboolean
  155. +gaim_account_set_password_in_keyring (const char *_prpl, const char *_user, const char *_password)
  156. +{
  157. +  GnomeKeyringResult result;
  158. +  guint32            item_id;
  159. +
  160. +  gpointer req = gnome_keyring_set_network_password (
  161. +                NULL,           /* default keyring */
  162. +                _user,          /* user            */
  163. +                NULL,           /* domain          */
  164. +                "gaim.local",   /* server          */
  165. +                NULL,           /* object          */
  166. +                _prpl,          /* protocol        */
  167. +                NULL,           /* authtype        */
  168. +                1863,           /* port            */
  169. +                _password,       /* password        */
  170. +                my_GnomeKeyringOperationGetIntCallback, NULL, NULL);
  171. +  return TRUE;
  172. +}
  173. +#endif
  174. --- pidgin/Makefile.am
  175. +++ pidgin/Makefile.am
  176. @@ -196,6 +196,7 @@
  177.         $(GTKSPELL_LIBS) \
  178.         $(STARTUP_NOTIFICATION_LIBS) \
  179.         $(LIBXML_LIBS) \
  180. +        $(GAIM_KEYRING_LIBS) \
  181.         $(GTK_LIBS) \
  182.         $(top_builddir)/libpurple/libpurple.la

  183. @@ -217,6 +218,7 @@
  184.         $(GSTREAMER_CFLAGS) \
  185.         $(DEBUG_CFLAGS) \
  186.         $(GTK_CFLAGS) \
  187. +        $(GAIM_KEYRING_CFLAGS) \
  188.         $(DBUS_CFLAGS) \
  189.         $(GTKSPELL_CFLAGS) \
  190.         $(STARTUP_NOTIFICATION_CFLAGS) \
  191. --- pidgin/gtkmain.c
  192. +++ pidgin/gtkmain.c
  193. @@ -69,6 +69,10 @@
  194. #include "pidginstock.h"
  195. #include "gtkwhiteboard.h"

  196. +#ifdef GAIM_ENABLE_KEYRING
  197. +#include <gnome-keyring.h>
  198. +#endif
  199. +
  200. #ifdef HAVE_SIGNAL_H
  201. # include <signal.h>
  202. #endif
  203. @@ -699,6 +703,12 @@
  204.         gtk_rc_add_default_file(search_path);
  205.         g_free(search_path);

  206. +#ifdef  GAIM_ENABLE_KEYRING
  207. +        GnomeKeyringResult rtn = gnome_keyring_unlock_sync(NULL, NULL);
  208. +        // if (rtn == GNOME_KEYRING_RESULT_DENIED)
  209. +        //   return 0;
  210. +#endif
  211. +
  212.         gui_check = gtk_init_check(&argc, &argv);
  213.         if (!gui_check) {
  214.                 char *display = gdk_get_display();
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表