Private set intersection (PSI) is a fundamental cryptographic protocol, which has many important applications, such as personal properties matching, data sharing, or data mining. PSI has been widely studied in the literature, and many PSI protocols have been presented; however, today, many real-world applications do not use a secure PSI protocol, mainly because current PSI protocols have two issues: the insufficient efficiency and not considering the secure storage of users' datasets. Without using the PSI protocols, users of the real-world applications will sacrifice their privacy. In this paper, we propose a new approach for sets representation, which denotes sets by bit vectors and naturally hides the cardinality of a set. The new approach is particularly suitable to cloud computing environments. Then, we present two practical PSI and PSI cardinality protocols based on an additive homomorphic public-key cryptosystem (PKC). The new protocols enjoy two main advantages: 1) they are more efficient than other related protocols, especially when the set size is less than 2 12 and 2) the approach used in our protocols provides a good solution to securely store users' datasets, and the encrypted datasets could be used as protocols' messages directly without any additional computations. Finally, we implement our PSI and PSI cardinality protocols with Paillier PKC and ElGamal PKC in Java.