Crypto requires hard problem that have hard instances that are easy to sample (for example, when we use RSA, it's easy for us to pick a modulus n = p * q that we think is "hard to factor" --- note that I'm not saying anything about factoring vs. NP, just giving an example of "easy to sample"). P != NP says that there are hard problems, but it doesn't say that it's easy to find the instance of those problems that are "hard". It leaves open the possibility that all NP-complete languages have mostly easy instances, and just a few really-hard-to-find hard instances, making them useless for crypto.
The definition of polytime is kindof broken in some other senses. For instance, an algorithm that runs in time N^(log log log log log log log log log log log log N); it's not polytime technically, but practically it is fast. You wouldn't want that kind of "superpolynomial" algorithm that works against your NP-hard crypto.
Crypto requires hard problem that have hard instances that are easy to sample (for example, when we use RSA, it's easy for us to pick a modulus n = p * q that we think is "hard to factor" --- note that I'm not saying anything about factoring vs. NP, just giving an example of "easy to sample"). P != NP says that there are hard problems, but it doesn't say that it's easy to find the instance of those problems that are "hard". It leaves open the possibility that all NP-complete languages have mostly easy instances, and just a few really-hard-to-find hard instances, making them useless for crypto. The definition of polytime is kindof broken in some other senses. For instance, an algorithm that runs in time N^(log log log log log log log log log log log log N); it's not polytime technically, but practically it is fast. You wouldn't want that kind of "superpolynomial" algorithm that works against your NP-hard crypto.